更新

更新

你好。

ssh [email protected]  "bash -lc 'pm2 list | grep app | awk { print $3} '"

我需要運行我貼在這裡的命令。問題是我已經轉義了兩次... bash"和 pm2 '。我怎樣才能逃脫 awk ?

我知道如果我用 awk '{ print $3 }' 轉義它就會起作用,但是 all 命令已經轉義了兩次...所以..我該怎麼辦?

更新

我創建了以下 bash 命令:

PM2_APP_ID=`$REMOTE_SRV_SSH_COMMAND "bash -lc \"pm2 list | grep app | grep -v 'pm2 show' | awk '{ print \\\$4 }'\""`;

在這裡我得到了所有 pm2 清單相關行,就像 awk 從未被執行過一樣。

答案1

您不能在單引號字串內反斜線轉義單引號,但可以在雙引號字串內反斜線轉義雙引號。所以你可以這樣做:

ssh [email protected]  "bash -lc \"pm2 list | grep app | awk '{ print \\\$3 }'\""

您需要在 awk 程式中轉義 $ 兩次,以避免 $3 被擴展,第一次是本機 shell,然後是遠端 shell。

答案2

感謝@dave_thompson_085 您的評論,它幫助我解決了問題。

我正在使用以下命令:

PM2_APP_ID=`$REMOTE_SRV_SSH_COMMAND "bash -lc 'pm2 list'" | grep app | grep -v 'pm2 show' | awk '{ print $4 }'`;

正如你在這裡看到的,我在刪除伺服器上使用 pm2 列表,其餘的我在本地進行。沒有逃避事情的麻煩,而且它工作正常。

相關內容