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