aktualisieren

aktualisieren

Hallo.

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

Ich muss den Befehl ausführen, den ich hier eingefügt habe. Das Problem ist, dass ich bereits zweimal aussteige ... das Bash mit "und das PM2 mit '. Wie kann ich aus Awk aussteigen?

ich weiß, dass es funktioniert, wenn ich es mit awk '{ print $3 }' escape, aber der All-Befehl wurde bereits zweimal escaped... also... was mache ich?

aktualisieren

ich habe den folgenden Bash-Befehl erstellt:

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

hier erhalte ich die für die gesamte PM2-Liste relevante Zeile, es ist, als wäre awk nie ausgeführt worden.

Antwort1

Sie können einfache Anführungszeichen innerhalb von Zeichenfolgen in einfachen Anführungszeichen nicht mit einem Backslash maskieren, aber doppelte Anführungszeichen innerhalb einer Zeichenfolge in doppelten Anführungszeichen können Sie mit einem Backslash maskieren. Sie könnten also Folgendes tun:

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

Sie müssen das $ im Awk-Programm zweimal maskieren, um zu verhindern, dass $3 erweitert wird, zuerst durch die lokale Shell und dann durch die Remote-Shell.

Antwort2

Danke @dave_thompson_085 für Ihren Kommentar, der mir geholfen hat, das Problem zu lösen.

ich verwende den folgenden Befehl:

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

wie Sie hier sehen können, verwende ich die PM2-Liste auf dem Remote-Server und den Rest mache ich lokal. Kein Aufwand mit dem Escapen von Dingen und es funktioniert ordnungsgemäß.

verwandte Informationen