混合使用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 ..'
答案 0 :(得分: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 ..'
答案 1 :(得分:5)
如果你问为什么你的文件的最后两行不会执行,那与你使用分号无关。 exec
取代当前流程。调用exec
后的任何代码都不会执行,因为只要调用exec
,进程就会停止执行。在大多数情况下,您希望使用system
,而不是exec
。
我还应该指出,在cd ..
或exec
的命令结尾处没有必要system
。 cd
仅影响它执行的shell以及从该shell生成的任何进程 - 它不会影响父进程。因此,如果你在shell命令中cd
,那么你的ruby进程不会受到影响,所以不需要cd
回来。
哦,你不能在单引号字符串中使用\n
之类的转义序列,它们只会显示为反斜杠后跟字母n。如果要使用\n
,则需要使用双引号字符串。如果您使用puts
代替print
,则会自动在结尾处插入换行符,因此您根本不需要\n
。
答案 2 :(得分:0)
将字符串放在backquote(`)之间将执行字符串作为系统命令。
例如试试这个。
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 ..`