簡體   English   中英

從腳本流中捕獲退出代碼

[英]capture exit code from a script flow


我需要一些正在編寫的腳本的幫助。
場景:

  • 腳本A由調度過程執行。 該腳本采用傳遞給它的參數,以某種方式對其進行解析,然后運行腳本B將這些參數提供給它。
  • 腳本B執行sudo -u用戶ssh user @ REMOTEMACHINE ,運行一些命令(在遠程計算機中),最后運行腳本C (也在遠程計算機中)。 我正在使用HERE DOCUMENT傳遞這些命令。 另外,我也將先前的參數傳遞給此腳本。
  • 此“流”正確運行,並且作業成功完成。

我的問題是:

  • 由於此“流程”是由調度過程運行的,因此我需要告訴它作業是否成功完成。 我正在通過退出代碼執行此操作,所以我想要的是擁有一系列退出代碼,以防萬一出錯時從最后一個腳本返回到第一個腳本。 我無法執行此操作,因為退出代碼對於單個腳本可以正常工作(我嘗試單獨執行它們並查找退出代碼),但是它們不會發送回父腳本。 在我看來,問題在於ssh從子腳本中獲取了退出代碼,實際上該退出成功完成了,因為執行該命令沒有錯誤:這是其中的命令出錯了。
  • 當該過程正常運行時,我仍然得到以下信息:

    ssh: Could not resolve hostname : Name or service not known

但是實際上腳本成功完成了。

希望您能理解我寫的內容,最終我可以在此處發布腳本。

謝謝

O.


編輯:
這是腳本。 變量名可能存在一些問題,因為我快速重命名了變量名以上傳文件。
由於信譽不佳,我無法上傳3個文件,因此將它們合並為一個文件
腳本文件

我設法解決了這個問題。
我遵循了olivier的建議,並使用了轉義字符使變量由遠程計算機擴展。
我還根據錯誤發生的位置實施了不同的退出代碼。
最后,在為第二個腳本啟動sudo -u之后,我對第一個腳本進行了如下修改:

EXITCODEOFTHESECONDSCRIPT=$?    
if [ $EXITCODEOFTHESECONDSCRIPT = 0 ]
    then
        echo ""
        echo "Export job took $SECONDS seconds."
        echo ""
        exit 0
else
    exit $EXITCODEOFTHESECONDSCRIPT
fi  

這樣,我就可以退出主腳本,並保持第二個腳本提供的退出代碼。 實際上,我發現問題在於即使在出現錯誤的情況下,該過程也能正常運行,但是在第二個腳本失敗(echo命令就足夠了)之后我給出了更多命令的事實提供了其他退出代碼來覆蓋了該代碼我想了。

謝謝大家 !

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM