【问题标题】:Changing directory in ubuntu with Ruby and a command line tool使用 Ruby 和命令行工具更改 ubuntu 中的目录
【发布时间】:2014-01-18 19:58:17
【问题描述】:
#!/home/user/.rvm/rubies/ruby-2.0.0-p353/bin/ruby

 case ARGV[0]
        when "apache"
                exec('cd /etc/apach2')
                exec('sudo nano httpd.conf')

        #...
 end

我正在尝试制作一个快速的命令行工具,它可以用一个词为我更改目录.. 所以从命令行(在 ubuntu 12 中)。它告诉我它不能 cd.. 但我自己尝试了这个命令,它会工作得很好。

【问题讨论】:

  • 是否有理由不使用此处所述的alias 命令:howtogeek.com/73768/…?您是否正在寻找链接命令?你能显示实际的命令行错误吗?即复制并粘贴到您的问题中。
  • /home/user/bin/test.rb:5:in exec': No such file or directory - cd (Errno::ENOENT) from /home/user/bin/test.rb:5:in
    '
  • 另外,我宁愿只知道如何在 ruby​​ 中做到这一点。我想操纵系统输出并编写更复杂的命令

标签: ruby shell ubuntu command-line


【解决方案1】:

好的,我这样做了,它可以工作(我在 OS X 上,但应该是一样的):

ARGV[0]
  when "testme"
    system('cd ripple')
    system('ls -al')

    #...
end

调用system('cd ... 不会改变将您移动到您正在执行.rb 文件的当前shell 中的那个目录。所以这样做会更有意义:

system('sudo nano /etc/....

全部在一行

我用反勾号对其进行了测试,但它对我来说根本不起作用。

我用exec() 进行了测试,得到了预期的结果,它只运行了一行。所以exec() 可以工作,如果你只有一个命令可以运行,或者你将它们全部与&& 链接在一起

exec('ls /etc && sudo nano /etc/....

我会读到这个:http://rubyquicktips.com/post/5862861056/execute-shell-commands

【讨论】:

  • 不应该是“case c”吗?
  • 另外请注意,当我运行它时,它只是分别执行每一个。即它确实是cd...,但它会在我所在的目录上执行ls -al,而不是我要求它到CD的目录。
  • 当然你不必cd到目录来运行命令,所以我会把你原来的改成一行:sudo nano /etc/apach2/httpd.conf
【解决方案2】:

Ruby 的 Dir 类是您的朋友,请查看 chdir 方法:

Dir.chdir('/path/to/change/to')

将在代码运行时改变 Ruby 对当前工作目录的概念。任何子 shell 都会认为它们的起始目录。

您也可以传递chdir 一个块,该块中的所有代码都将采用新目录,然后在块退出时恢复到旧目录:

Dir.chdir('/path/to/change/to') do
  # do some stuff
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 2023-03-26
    • 2013-07-19
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多