无法使用Ruby发送终端命令

无法使用Ruby发送终端命令,ruby,environment-variables,watir,Ruby,Environment Variables,Watir,我需要知道如何通过Ruby发送终端命令来执行另一个应用程序。我想在我的Watir脚本中的某个点调用SIKULI脚本来处理Watir无法处理的一些步骤 我不知道怎么做。我在StackOverflow上读了一些文章,但没能让它发挥作用 以下是手动执行的步骤: jfleck-mbp:~ joe.fleck$ SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java jfleck-mbp:~ joe.fleck$ java -jar

我需要知道如何通过Ruby发送终端命令来执行另一个应用程序。我想在我的Watir脚本中的某个点调用SIKULI脚本来处理Watir无法处理的一些步骤

我不知道怎么做。我在StackOverflow上读了一些文章,但没能让它发挥作用

以下是手动执行的步骤:

jfleck-mbp:~ joe.fleck$ SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java
jfleck-mbp:~ joe.fleck$ java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'
这些文件位于我尝试执行的Ruby文件中:

require 'rubygems'
system('SIKULI_HOME=/Applications/Sikuli-IDE.app/Contents/Resources/Java')
system ("java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'")
我得到的结果是:

Unable to access jarfile /sikuli-script.jar
这告诉我脚本中的第一行没有执行,这允许访问

任何建议都将不胜感激。

我认为每个
system()
命令都会给您带来不同的shell

一种简单的验证方法,也是一种更易于维护的方法,IMHO,将所有命令放在一个(bash/zsh/which)脚本中,并使用
system()

运行该脚本。我认为每个
system()
命令都会得到不同的shell

一种简单的验证方法和一种更易于维护的方法IMHO是将所有命令放在一个(bash/zsh/which)脚本中,并使用
system()
运行该脚本,如下所示:

ENV['SIKULI_HOME'] = '/Applications/Sikuli-IDE.app/Contents/Resources/Java'
system ("java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'")
问题是,当您调用
系统时,您正在调用一个子进程。子进程从父进程(在本例中是Ruby脚本)继承环境。使用
system
设置环境变量仅为该子进程设置环境变量,对系统的下一次调用是具有新环境的新子进程

上述解决方案在父进程中设置环境变量,因此将为所有子进程设置环境变量。

如下所示:

ENV['SIKULI_HOME'] = '/Applications/Sikuli-IDE.app/Contents/Resources/Java'
system ("java -jar $SIKULI_HOME/sikuli-script.jar '/Users/joe.fleck/Desktop/Save_File_Button.sikuli'")
问题是,当您调用
系统时,您正在调用一个子进程。子进程从父进程(在本例中是Ruby脚本)继承环境。使用
system
设置环境变量仅为该子进程设置环境变量,对系统的下一次调用是具有新环境的新子进程


上面显示的解决方案在父进程中设置环境变量,因此将为所有子进程设置环境变量。

感谢您的响应。我对ruby还很陌生,所以我不知道怎么做。这不是ruby的问题,它正在学习如何将命令放入shell脚本并从ruby调用它。后者非常简单:
`ls-al`
就是一个例子。有关更多示例,请使用
ri
获取
Kernel#system
IO.popen
Open3.popen2
Open3.popen3
的文档。感谢您的回复。我对ruby还很陌生,所以我不知道怎么做。这不是ruby的问题,它正在学习如何将命令放入shell脚本并从ruby调用它。后者非常简单:
`ls-al`
就是一个例子。有关更多示例,请使用
ri
获取
Kernel#system
IO.popen
Open3.popen2
Open3.popen3
的文档。