1

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

3 回答 3

6

你混在一起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 ..'
于 2013-04-06T13:54:08.003 回答
5

如果您问为什么文件的最后两行不会执行,那与您使用分号无关。exec替换当前进程。调用后的任何代码exec都不会执行,因为进程一旦exec被调用就停止执行。大多数情况下你想使用system,而不是exec

我还应该指出,没有必要cd ..在给execor的命令结束时做systemcd仅影响执行它的 shell 以及从该 shell 产生的任何进程——它不影响父进程。因此,如果您cd在 shell 命令中,您的 ruby​​ 进程将不会受此影响,因此无需cd返回。

哦,您不能像\n在单引号字符串中那样使​​用转义序列,它们只会显示为反斜杠,后跟字母 n。如果你想使用,你需要使用双引号字符串\n。如果你使用puts而不是print,它会在最后自动插入一个换行符,所以你根本不需要\n

于 2013-04-06T13:53:23.197 回答
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 ..`
于 2013-04-06T18:49:53.137 回答