2015-10-18 2 views
3
puts "start" 
ret1 = exec('pwd') 
puts ret1 
ret2= exec('hostname') 
puts ret2 

a = "." 
puts a 

exec('ls ~') 
////code exit from here... not any other output why? 
puts a 
puts a 
puts a 

Мой следующий код после второго вызова exec. Почему это?почему рубиновый код сбой/выход после моего второго вызова exec?

% ruby exec.rb 
start 
/Users/xxx/code/ 

Это мой вывод, когда я запускал этот код.

ответ

2

Kernel#execзаменяет текущий текущий процесс. После его выполнения оставшаяся часть кода не запускается.

puts "start" 
ret1 = exec('pwd') # <---- After this, no more remaining code is executed. 
... 

Если вы хотите, чтобы получить вывод команды, используйте Kernel#` вместо:

puts "start" 
ret1 = `pwd` 
+0

проблема я использую строку в запускаемой функции(). кажется backslick не может справиться с этим случаем. – BufBills

+2

@BufBills, вы имеете в виду, что ваша команда построена с использованием строковой переменной? Вы можете использовать интерполяцию строк: \ 'ls # {path} \' – falsetru

+0

проклятье! @falsetru человек, которого ты спас мой день. Большое вам спасибо – BufBills

Смежные вопросы