gpt4 book ai didi

ruby - 改变当前目录

转载 作者:数据小太阳 更新时间:2023-10-29 08:33:23 25 4
gpt4 key购买 nike

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

最佳答案

system() 的每次调用都完全独立于其他调用;它们之间没有共享隐藏的 shell session 。 (我很确定,事实上,它们每个都在自己的进程中运行——cd 有效,但它不会影响您的进程。)您可以更改进程的目录Dir.chdir()。您也不需要在使用命令之前将它们放入变量中。我会做这样的事情:

system("mkdir /usr/java")
system("cp /home/user/Downloads/file.txt /usr/java/")
Dir.chdir("/usr/java/")

请注意,如果您只是等待复制完成,则无需sleep()system() 已经在等待命令完成。否则,无论如何,sleep(2) 都会有些脆弱。

更新:根据您的更新信息,看起来您最好还是使用 shell 脚本,至少对于脚本的这一部分而言。您可以通过 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

如果您需要从 Ruby 调用它,只需使用 system() 来运行脚本。请务必设置可执行位,或使用您的 shell 调用它(例如 system("bash script_name"))。

关于ruby - 改变当前目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981170/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com