一个文件中有多个'exec'和'print'命令

时间:2013-04-06 13:48:50

标签: ruby

混合使用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 ..'

3 个答案:

答案 0 :(得分:6)

您将execsystem混为一谈。 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的命令结尾处没有必要systemcd仅影响它执行的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 ..`