2012-05-02 2 views
0

Я пытаюсь ввести irb из сценария оболочки, что-то сделать, а затем вернуться к сценарию оболочки.Ввод и выход подпроцесса из Shell Script

Как я могу это сделать?

#!/bin/bash 
#example_app 

# Some shell instructions here 
irb 
four = 2 + 2 
exit 
echo "This text is not reached and the process hangs open" 

Примечание: я не должен пытаться загрузить IRB ввести статический код, я согласен с вами, ребята. Я не думал о том, что делаю. Я взаимодействовал с библиотекой AWS, и я попытался перенести ту же самую философию в автоматизацию этого, не задумываясь об этом дважды.

+0

Вы ищете что-то вроде 'eval' или вам действительно нужен новый процесс? –

+0

Я не уверен, что вы просите. Судя по странице [irb man] (http://linux.die.net/man/1/irb), вы можете искать что-то вроде [expect] (http://linux.die.net/man/1/ожидать). –

+0

Я пытаюсь выполнить ряд команд ruby ​​из сценария оболочки, который отлично работает с консолью ruby, если я вручную введу 'irb'. Чрезвычайно упрощенное объяснение того, что мне нужно, - это [сценарий оболочки, который может входить в irb, что-то делать и возвращаться к сценарию оболочки для 'echo'« Done! »] – Dru

ответ

2

Вы можете пройти здесь документ irb:

irb <<SCRIPT 
    four = 2 + 2 
    puts four 
SCRIPT 

Однако я не думаю, что это выполнит то, что вы пытаетесь сделать. Вот результат:

Switch to inspect mode. 
    four = 2 + 2 
4 
    puts four 
4 
nil 

Он похож на bash -x. Почему бы просто не использовать простой старый ruby для этого?

ruby <<SCRIPT 
    four = 2 + 2 
    puts four 
SCRIPT 
4 

Там нет необходимости, чтобы породить в интерактивной оболочки, если вы не собираетесь взаимодействовать с ним.

0

Я думаю, что вы хотите, чтобы ответ объяснена с fork and exec in bash по существу:

function_to_fork() { IRB }

function_to_fork &

, что не может работать, если вы хотите некоторое взаимодействие там влияют на родительский процесс или на процесс родительского процесса.

Мой комментарий ниже не форматировать очень хорошо:

С следующей программе мне удалось достичь:

#!/bin/bash 
# irbb.sh 
irb 
echo "here" 

$ ./irbb.sh 
>> four = 2 + 2 
=> 4 
>> exit 
here 
+0

Я не думаю, что это вообще отвечает на вопрос. OP по существу хочет запустить некоторые команды в другой оболочке, а затем вернуться к своему сценарию последовательно, а не параллельно. –

+0

Я попробовал то, что вы предложили.Процесс не зависает, как и раньше, но команды оболочки после того, как fork не выполняются, и код внутри вилки, похоже, не выполняется. (Фактический код ruby, включает в себя хранение файлов. Я проверил это вручную, и он работает. Вот как я могу выделить его для этого сценария оболочки.) – Dru

+0

С помощью следующей программы мне удалось достичь: #!/bin/Баш # irbb.sh IRB эхо "здесь" $ ./irbb.sh >> четыре = 2 + 2 = > 4 >> выход здесь – Ecuageo

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