2012-05-02 78 views
0

我想從shell腳本輸入irb,執行一些操作,然後返回到shell腳本。從Shell腳本進入和退出子進程

我該怎麼做?

#!/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手冊頁](http://linux.die.net/man/1/irb)來判斷,你可能正在尋找[expect](http://linux.die.net/man/1) /期望)。 –

+0

我試圖從shell腳本執行一系列ruby命令,如果手動輸入'irb',它可以從ruby控制檯完美地工作。一個非常簡單的解釋我需要的是[一個shell腳本,可以輸入irb,執行某些操作,然後返回shell腳本'echo'完成!「] – 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基本上想要在另一個shell中運行一些命令,然後按順序返回到他的腳本,而不是並行。 –

+0

我嘗試了你的建議。該過程不像以前那樣掛起,而是在fork之後的shell命令沒有得到執行,fork內部的代碼似乎沒有被執行。 (實際的Ruby代碼,包括存儲文件,我手動測試這和它的作品這就是我是如何能夠將它隔離到這個shell腳本。) – Dru

+0

用下面的節目,我是能夠實現: #! /斌/慶典 #irbb.sh IRB 回聲 「這裏」 $ ./irbb.sh >>四= 2 + 2 => 4 >>退出 這裏 – Ecuageo