Rubyのように Bash コマンドを使用してpushd
も意味がありません。これらのコマンドは Bash インタープリターの Bash の内部状態に影響を与えるためです。Ruby からバッククォートまたは を使用してシェル コマンドを実行するとsystem
、新しいサブプロセスが作成され、コマンドが実行され、そのサブプロセスが閉じられます。
つまり、どうにかしてpushd
Ruby から Bash コマンドとして実行できたとしても、Bash サブプロセスが開始され、ディレクトリがディレクトリ スタックにプッシュされてから終了します。ディレクトリ スタックに加えた変更は、他のすべてのサブプロセスのデータと共に消去されます。次にシェル コマンドを使用するときには、そのディレクトリに移動することはありません。
Bash ではなく、Ruby でスクリプトを作成しています。内部の Bash コマンドはここでは意味がないため、Ruby に相当するコマンドを使用する必要があります。たとえば、次のように書く代わりに:
system 'pushd /tmp'
system 'touch file_in_tmp'
system 'popd'
これはうまくいきません。あなたがしたいことは次のとおりです。
Dir.chdir '/tmp' do
system 'touch file_in_tmp'
end