更新

更新

你好。

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

我需要运行我在这里粘贴的命令。问题是我已经转义了两次...... bash 用"和 pm2 用'。我怎样才能逃脱 awk ?

我知道如果我用 awk '{ print $3 }' 转义它,它就会起作用,但是所有命令已经转义两次...所以..我该怎么办?

更新

我创建了以下 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 列表删除服务器,其余操作我在本地执行。无需担心逃避,而且工作正常。

相关内容