2013-04-06 74 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