Bash
bash shell - ssh 遠端腳本擷取輸出和退出程式碼?
我希望使用 shell 來呼叫遠端伺服器上的腳本。我想擷取該腳本的輸出(它的日誌消息)和它返回的退出程式碼。
如果我這樣做:
ssh user@server /usr/local/scripts/test_ping.sh echo "$?"
我得到了退出程式碼,但無法擷取遠端日誌消息。
如果我這樣做:
local RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh) echo "$?" LOG "${RESULTS}";
我可以使用我的 LOG 函式記錄我的輸出,但似乎無法獲得正確的退出程式碼,我假設我得到的程式碼是來自變數賦值的程式碼。
我想繼續使用我的 LOG 函式來擷取所有輸出,因為它為我格式化並將內容髮送到文件、系統日誌和螢幕。
如何在 var 中擷取結果並從遠端腳本中獲取正確的退出程式碼?
您沒有得到正確錯誤程式碼的原因是因為
local
實際上是執行的最後一件事。在執行命令之前,您需要將變數聲明為本地變數。local RESULTS RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh) echo $?
你可以在這裡看到問題:
$ bar() { foo=$(ls asdkjasd 2>&1); echo $?; }; bar 2 $ bar() { local foo=$(ls asdkjasd 2>&1); echo $?; }; bar 0 $ bar() { local foo; foo=$(ls asdkjasd 2>&1); echo $?; }; bar 2
“本地”似乎是問題所在。這對我有用:
local RESULTS RESULTS=$(ssh user@server /usr/local/scripts/test_ping.sh) echo $?