actualizar

actualizar

Hola.

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

Necesito ejecutar el comando que pegué aquí. el problema es que ya me estoy escapando dos veces... el bash con "y el pm2 con '. ¿Cómo puedo escapar de awk?

Sé que funcionará si escapo con awk '{ print $3 }' pero el comando all ya se escapó dos veces... entonces... ¿qué hago?

actualizar

Creé el siguiente comando bash:

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

aquí obtengo la línea relevante de toda la lista pm2, es como si awk nunca se hubiera ejecutado.

Respuesta1

No se pueden evitar las comillas simples con barra invertida dentro de cadenas entre comillas simples, pero sí se pueden evitar las comillas dobles con barra invertida dentro de una cadena entre comillas dobles. Entonces podrías hacer esto:

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

Debe escapar de $ en el programa awk dos veces para evitar que $3 se expanda, primero por el shell local y luego por el remoto.

Respuesta2

Gracias @dave_thompson_085 por tu comentario, que me ayudó a resolver el problema.

Estoy usando el siguiente comando:

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

Como puede ver aquí, uso la lista pm2 en el servidor de eliminación y el resto lo hago localmente. No hay problemas para escapar de las cosas y funciona correctamente.

información relacionada