2013-04-06 111 views
1

當混合exec命令和print命令時,使用分號不起作用。執行此操作的最佳方法是什麼?在一個文件中多次執行'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

如果您問爲什麼文件的最後兩行不會執行,那與您使用分號無關。 exec取代當前進程。調用exec後的任何代碼都不會執行,因爲只要調用exec,進程就會停止執行。在大多數情況下,您想使用system,而不是exec

我還應該指出,在execsystem的命令結尾處沒有必要做cd ..cd隻影響它在其中執行的shell以及從該shell生成的所有進程 - 它不影響父進程。所以如果你在shell命令中使用cd,你的ruby進程就不會受到這個影響,所以不需要返回cd

哦,你不能在單引號字符串中使用像\n這樣的轉義序列,它們只會顯示爲反斜槓,後面跟着字母n。如果您想使用\n,則需要使用雙引號字符串。如果您使用puts而不是print,它會自動在最後插入一個換行符,因此根本不需要\n

4

你在混合execsystemexec替換運行參數命令的當前進程。如果要運行該文件,並等待它並獲得控制回來,你需要使用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 ..' 
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 ..` 
+0

反斜槓將命令的輸出作爲字符串返回而不打印。這很好,如果這就是你想要的,但是在你的代碼中你不會對返回的字符串做任何事情,所以輸出只是被丟棄。我很確定OP想看看輸出。 – sepp2k 2013-04-06 18:54:12

+0

@Sachin有反向插入的方法嗎? – bwobst 2013-04-06 21:06:03

+0

@dresdin:是的,像字符串一樣使用'#{}'。 – Linuxios 2013-04-07 00:47:13