从ruby中运行父shell中的命令

时间:2009-06-18 12:11:42

标签: ruby bash shell scripting

我正在尝试更改shell的目录我通过ruby脚本本身启动ruby脚本表单...

我的观点是构建一个小程序来管理收藏夹目录并轻松地在它们之间进行更改。

这就是我做的事情

#!/usr/bin/ruby
Dir.chdir("/Users/luca/mydir")

and than tried executing it in many ways...

my_script (this doesn't change the directory)
. my_script (this is interpreted as bash)
. $(ruby my_script) (this is interpreted as bash too!)

任何想法?

2 个答案:

答案 0 :(得分:4)

无法完成。子进程无法修改其父对象环境(包括父进程的当前工作目录)。 .(也称为source)技巧仅适用于shell脚本,因为您告诉shell在当前进程中运行该代码(而不是生成子进程来运行它)。只是为了好玩,试着把exit放在你用这种方式运行的文件中(剧透:你会被注销)。

如果你希望有这种工作的错觉,你需要创建调用你的Ruby脚本的shell函数,并让shell函数执行实际的cd。由于函数在当前进程中运行,因此可以更改目录。例如,给定这个ruby脚本(名为temp.rb):

#!/usr/bin/ruby

print "/tmp";

您可以编写此BASH函数(例如,您~/.profile):

function gotmp {
    cd $(~/bin/temp.rb)
}

然后你可以在命令行说gotmp并更改目录。

答案 1 :(得分:0)

#!/usr/bin/env ruby

`../your_script`

喜欢这个吗?

或者在您希望它执行某些操作的目录中启动您的脚本。

也许我没有得到你的问题。提供更多细节。