2014-11-21 67 views
0

我想在bash提示符下運行以下命令時捕獲bash shell上的輸出。如何在bash shell中捕獲rails runner「MyCloud :: Deployment.checkuser」的輸出

rails runner "MyCloud::Deployment.checkuser" 

基本上checkuser()返回1或0的值,其欲在該推出「軌道亞軍」命令外殼捕捉。

根據shell的寫入值,我想執行一些其他的命令。這個checkuser()連接到雲端,訪問SQL服務器並返回值,所以我需要加載rails env。

我在hudson「execute shell」窗口中運行這個命令。我如何去完成這項任務? 耙子能幫助我嗎?

編輯:

 
#to keep things simple: 
module MyCloud 
    class Deployment 
    def self.checkuser 
     return 20 
    end 
    end 
end 

I am running the command from ubuntu box: 
[email protected]:~/work/co/RoR$ res="$(rails runner "MyCloud::Deployment.checkuser")" 
[email protected]:~/work/co/RoR$ echo $res 

[email protected]:~/work/co/RoR$ 

我要拍攝是從check_user()返回在bash shell的一個變量的值。

+0

你嘗試無論如何保存呢? – tinySandy 2014-11-21 15:48:21

+0

不清楚你在問什麼。你是在談論返回的值「0」或「1」還是退出代碼?如果「執行shell」步驟不返回0,哈德森不會自動中止運行嗎? – arco444 2014-11-21 15:48:26

+0

checkUser()根據用戶是否存在返回1或0;我不是指退出狀態。我從bash命令提示符啓動rails runner命令,並且我喜歡在bash shell中捕獲它的輸出。 – Sreeni 2014-11-21 16:10:02

回答

2

編輯:您是在混淆返回值(對象返回相同的語言主叫)與文本輸出。您需要puts 20將其作爲字符串捕獲。如果沒有foreign function interface或類似機制,您無法從另一種語言的一種語言捕獲返回值。一個罕見的例外是* nix shell之間的接口,例如Bash和Dash,您可以從另一箇中捕獲返回值,因爲它們都執行類似於POSIX shell的操作。

要獲得退出代碼,測試命令或$?

rails runner "MyCloud::Deployment.checkuser" 
if [ $? -eq 0 ] 
then 
    echo "Success" 
else 
    echo "Failure" 
fi 

簡稱:

if rails runner "MyCloud::Deployment.checkuser" 
then 
    echo "Success" 
else 
    echo "Failure" 
fi 

要獲得的輸出,使用process substitution(是的,those inner quotes are correct ):

result="$(rails runner "MyCloud::Deployment.checkuser")" 
if [ "$result" = '0' ] 
then 
    echo "Success" 
else 
    echo "Failure" 
fi 

簡稱:

if [ "$(rails runner "MyCloud::Deployment.checkuser")" = '0' ] 
then 
    echo "Success" 
else 
    echo "Failure" 
fi 

同時捕獲輸出和退出代碼:

result="$(rails runner "MyCloud::Deployment.checkuser")" 
exit_code=$? 
+0

@ I0b0:checkuser()返回一個我想要捕獲它的值,但不是退出狀態。假設它返回20,我想捕獲它。 – Sreeni 2014-11-21 16:15:57

+0

請說明你想要的。答案清楚地涵蓋了退出代碼和輸出。除了shell代碼中的退出代碼之外,沒有其他的「返回值」。 – l0b0 2014-11-21 16:18:03

+0

這不是一個有效的命令 result =「$(rails runner」MyCloud :: Deployment.checkuser「)」 – Sreeni 2014-11-21 16:32:02