无法使用Ruby发送终端命令
我需要知道如何通过Ruby发送终端命令来执行另一个应用程序。我想在我的Watir脚本中的某个点调用SIKULI脚本来处理Watir无法处理的一些步骤 我不知道怎么做。我在StackOverflow上读了一些文章,但没能让它发挥作用 以下是手动执行的步骤:无法使用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
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
的文档。