代码之家  ›  专栏  ›  技术社区  ›  Joe Mastey

在ruby脚本中执行cd命令

  •  4
  • Joe Mastey  · 技术社区  · 14 年前

    我想在ruby脚本中更改当前shell的pwd。所以:

    > pwd
    /tmp
    > ruby cdscript.rb
    > pwd
    /usr/bin
    

    这是我现在的代码:

    exec('cd /usr/bin')
    

    `exec': No such file or directory - cd (Errno:ENOENT)
    

    有解决办法吗?


    6 回复  |  直到 14 年前
        1
  •  3
  •   Zargony    14 年前

    正如其他答案已经指出的,您可以在ruby脚本中更改pwd,但它只影响子进程(ruby脚本)。不能从子进程更改父进程的pwd。

    myscript.rb码:

    # … fancy code to build somepath …
    puts "cd #{somepath}"
    

    称之为:

    `ruby myscript.rb`
    

    使用别名使其成为一个简单的命令:

    alias myscript='`ruby /path/to/myscript.rb`'
    

    不幸的是,这种方法不能让脚本向用户输出文本,因为脚本输出的任何文本都是由shell执行的(尽管还有更多的解决方法)。

        2
  •  14
  •   Vinko Vrsalovic    14 年前

    Dir.chdir("/usr/bin") 将更改ruby脚本中的pwd,但这不会更改shell的pwd,因为脚本在子进程中执行。

        3
  •  8
  •   Bertrand Marron    14 年前

    您将无法更改shell的工作目录。

        4
  •  6
  •   Leonard Teo    12 年前

    我可以通过在backticks中运行多个语句来解决这个问题。

    'cd #{path} && <statement> && cd ..'
    
        5
  •  0
  •   sepp2k    14 年前

        6
  •  0
  •   Winbobob    8 年前

    你可以试着用 system 而不是 exec .

    就像 system("cd #{new_path} && <statement> && cd #{original_path}")