Bash

bash shell - ssh 遠端腳本擷取輸出和退出程式碼?

  • August 5, 2021

我希望使用 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 $?

引用自:https://unix.stackexchange.com/questions/66581