2

どのように実行し、バックティックpushdpopd使用しますか?

バックティックで実行するpushd /tmpと、エラーが発生します。

"No such file or directory - pushd /tmp"
4

2 に答える 2

14

Rubyシェルアウト(バックティック)はそれぞれ新しいサブシェルで実行されるため、おそらくあなたが考えている方法では機能しません。

a = `pwd`
`cd '/tmp'`
b = `pwd`
b == a         # => true
b == "/tmp"    # => false

また、あなたは確かpushdにあなたのシェルで動作しますか?たぶん、ルビーの使用を検討するか、バッククォート構文よりも便利なものが必要systemかどうかを検討してください。popen3

Dir#chdirブロックを受け入れます。ディレクトリでいくつかのコマンドを実行してから元に戻すだけでよい場合は、ドキュメントの例を次に示します。

Dir.chdir("/var/spool/mail")
puts Dir.pwd
Dir.chdir("/tmp") do
  puts Dir.pwd
  Dir.chdir("/usr") do
    puts Dir.pwd
  end
  puts Dir.pwd
end
puts Dir.pwd
于 2012-05-24T14:58:43.670 に答える
5

そのようにバックティックでプッシュを使用することはできません。pushdはBashビルトインであり、実行可能ファイルではありません。ただし、 RubyShellモジュールでも同様の機能を利用できます。

require 'shell'
shell = Shell.new
shell.pushd '/tmp'
shell.popd
于 2012-05-24T18:20:37.087 に答える