【问题标题】:run command in parent shell from ruby从 ruby​​ 在父 shell 中运行命令
【发布时间】:2009-06-18 12:11:41
【问题描述】:

我正在尝试更改 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!)

有什么想法吗?

【问题讨论】:

    标签: ruby bash shell scripting


    【解决方案1】:

    无法完成。子进程不能修改其父环境(包括父进程的当前工作目录)。 .(也称为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 并更改目录。

    【讨论】:

    • 非常有趣...我会继续努力的...顺便说一句,您知道任何命令行实用程序可以更好地管理导航、收藏夹等(不是像 mc 这样的完整文件管理器)吗?谢谢
    • 制表符补全排除了大多数“收藏夹”的需要,您可能还想查看符号链接(ln -s /tmp ~/tmp)。您可能还想研究 pushd 和 popd 作为 cd 的替代品。
    • Chas,抱歉,请您看一下这个问题stackoverflow.com/questions/1151217,看看您能否对此有所了解,好吗?非常感谢。
    • 愚蠢的疑问:如果可以在 c 中使用,为什么不是 ruby​​? iq.opengenus.org/implementing-cd-command-in-c
    【解决方案2】:
    #!/usr/bin/env ruby
    
    `../your_script`
    

    像这样?

    或者在你希望它做某事的目录中启动你的脚本。

    也许我不明白你的问题。提供更多详细信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-26
      • 2016-07-18
      • 1970-01-01
      • 2015-08-11
      • 1970-01-01
      • 2015-12-06
      • 1970-01-01
      • 2013-10-31
      相关资源
      最近更新 更多