1

execコマンドとコマンドを混在させる場合、セミコロンの使用は機能しませんprint。これを行う最善の方法は何ですか?

print "Initializing tests...\n"
print 'Testing 00_hello\n'
exec  'cd 00_hello; rspec hello_spec.rb; cd ..'
print 'Testing 01_temperature\n'
exec  'cd 01_temperature; rspec temperature_spec.rb; cd ..'
4

3 に答える 3

6

と混同しexecていsystemます。現在のプロセスを引数のコマンドの実行にexec 置き換えます。ファイルを実行し、それを待って制御を取り戻したい場合は、次を使用する必要がありますsystem

print "Initializing tests...\n"
print 'Testing 00_hello\n'
system  'cd 00_hello; rspec hello_spec.rb; cd ..'
print 'Testing 01_temperature\n'
system  'cd 01_temperature; rspec temperature_spec.rb; cd ..'
于 2013-04-06T13:54:08.003 に答える
5

ファイルの最後の 2 行が実行されない理由を尋ねている場合、それはセミコロンの使用とは関係ありません。exec現在のプロセスを置き換えます。execが呼び出されるとすぐにプロセスが実行を停止するため、への呼び出しに続くコードは実行されませんexec。ほとんどの場合system、 ではなくを使用しますexec

またはcd ..に与えられたコマンドの最後に行う必要はないことも指摘しておきます。実行されるシェルとそのシェルから生成されたプロセスにのみ影響します。親プロセスには影響しません。そのため、シェル コマンド内であれば、Ruby プロセスは影響を受けないため、戻る必要はありません。execsystemcdcdcd

ああ、一重引用符で囲まれた文字列内のようにエスケープ シーケンスを使用することはできません\n。バックスラッシュとそれに続く文字 n として表示されます。を使用する場合は、二重引用符で囲まれた文字列を使用する必要があります\nputsの代わりにを使用するprintと、最後に自動的に改行が挿入されるため、 はまったく必要ありません\n

于 2013-04-06T13:53:23.197 に答える
0

文字列をバッククォート (`) の間に配置すると、文字列がシステム コマンドとして実行されます。

たとえば、これを試してください。

print "Initializing tests...\n"
print 'Testing 00_hello\n'
`cd 00_hello; rspec hello_spec.rb; cd ..`
print 'Testing 01_temperature\n'
`cd 01_temperature; rspec temperature_spec.rb; cd ..`
于 2013-04-06T18:49:53.137 に答える