我编写了一个Ruby脚本来在我的本地机器上安装Apache Tomcat。当我运行脚本时,我无法将当前目录更改为我想要的目录:
cmd = "mkdir /usr/java"
system(cmd)
cmd = "cp /home/user/Downloads/file.txt /usr/java/"
system(cmd)
sleep(2)
cmd = "cd /usr/java/"
system(cmd)
在上面的代码中,mkdir
和cp
命令工作正常,但问题出在cd
命令上。之后我的当前目录仍为/
,即/usr
目录的父目录。
更新:使用Dir.chdir()
工作,但我在设置JAVA_HOME
和PATH
变量时遇到了另一个问题。我的代码是:
cmd = "JAVA_HOME=/usr/java/jdk1.7.0_05"
system(cmd)
cmd = "export JAVA_HOME"
system(cmd)
cmd = "PATH=$JAVA_HOME/bin:$PATH"
system(cmd)
cmd = "export PATH"
system(cmd)
答案 0 :(得分:4)
对system()
的每次通话都完全独立于其他人;它们之间没有共享隐藏的shell会话。 (事实上,我很确定它们都是在自己的进程中运行 - cd
有效,但它不会影响您的进程。)您可以使用{{1更改进程的目录}}。在使用它们之前,您也不需要将命令放入变量中。我会做这样的事情:
Dir.chdir()
请注意,如果您只是等待副本完成,则无需system("mkdir /usr/java")
system("cp /home/user/Downloads/file.txt /usr/java/")
Dir.chdir("/usr/java/")
; sleep()
已经等待命令完成。如果没有,system()
无论如何都会有些脆弱。
更新:根据您的更新信息,您最好使用shell脚本,至少对于此部分脚本而言。您可以通过sleep(2)
在Ruby中设置环境变量,但这会很尴尬。这样的事情更有意义:
ENV
如果需要从Ruby调用它,只需使用#!/bin/bash
mkdir /usr/java
cp /home/user/Downloads/file.txt /usr/java/
cd /usr/java/
export JAVA_HOME=/usr/java/jdk1.7.0_05
export PATH=$JAVA_HOME/bin:$PATH
来运行脚本。请务必设置可执行位,或使用shell调用它(例如system()
)。
答案 1 :(得分:1)
您可以尝试使用Dir.chdir '/usr/java/'
另外,要查看irb会话中的当前文件,您可以执行`ls`