混合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 ..'
Run Code Online (Sandbox Code Playgroud)
你混合起来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 ..'
Run Code Online (Sandbox Code Playgroud)
如果你问为什么你的文件的最后两行不会执行,那与你使用分号无关.exec取代当前的流程.调用后的任何代码exec都不会执行,因为调用后进程会立即停止执行exec.在大多数情况下,您想要使用system,而不是exec.
我还应该指出,没有必要cd ..在给予exec或的命令结束时这样做system.cd只会影响它执行的shell以及从该shell生成的任何进程 - 它不会影响父进程.因此,如果你cd在shell命令中,你的ruby进程不会受到影响,所以没有必要cd回来.
哦,你不能使用像\n单引号字符串中的转义序列,它们只会出现一个反斜杠后跟字母n.如果要使用,则需要使用双引号字符串\n.如果您使用puts而不是print,它会自动在最后插入一个换行符,因此您根本不需要它\n.