更改当前目录

时间:2012-08-16 05:28:28

标签: ruby

我编写了一个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)

在上面的代码中,mkdircp命令工作正常,但问题出在cd命令上。之后我的当前目录仍为/,即/usr目录的父目录。

更新:使用Dir.chdir()工作,但我在设置JAVA_HOMEPATH变量时遇到了另一个问题。我的代码是:

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)

2 个答案:

答案 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`