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 ..'
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 ..'
你混在一起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 ..'
如果您问为什么文件的最后两行不会执行,那与您使用分号无关。exec
替换当前进程。调用后的任何代码exec
都不会执行,因为进程一旦exec
被调用就停止执行。大多数情况下你想使用system
,而不是exec
。
我还应该指出,没有必要cd ..
在给exec
or的命令结束时做system
。cd
仅影响执行它的 shell 以及从该 shell 产生的任何进程——它不影响父进程。因此,如果您cd
在 shell 命令中,您的 ruby 进程将不会受此影响,因此无需cd
返回。
哦,您不能像\n
在单引号字符串中那样使用转义序列,它们只会显示为反斜杠,后跟字母 n。如果你想使用,你需要使用双引号字符串\n
。如果你使用puts
而不是print
,它会在最后自动插入一个换行符,所以你根本不需要\n
。
将字符串放在反引号(`)之间会将字符串作为系统命令执行。
例如试试这个。
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 ..`