escapando o awk com o comando ssh remoto e o bash que já escapou

1

Olá.

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

Eu preciso executar o comando que colei aqui. o problema é que eu já estou escapando duas vezes ... o bash com " e o pm2 com ' . como posso fugir do awk?

Eu sei que ele funcionará se eu escapar com awk '{print $ 3}', mas o comando all já está com escape duas vezes ... então ... o que eu faço?

atualizar

eu criei o seguinte comando bash:

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

aqui eu recebo a linha relevante da lista all pm2, é como se o awk nunca tivesse sido executado.

    
por ufk 04.08.2015 / 16:54

2 respostas

1

Você não pode usar aspas simples em barra invertida entre as strings com aspas simples, mas é possível fazer aspas duplas entre barras invertidas entre aspas duplas. Então você poderia fazer isso:

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

Você precisa escapar do $ no programa awk duas vezes para evitar que os $ 3 sejam expandidos, primeiro pelo shell local e depois pelo remoto.

    
por 04.08.2015 / 19:51
1

obrigado @ dave_thompson_085 pelo seu comentário, que me ajudou a resolver o problema.

Estou usando o seguinte comando:

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

como você pode ver aqui eu uso a lista pm2 no servidor remove, e o resto eu estou fazendo localmente. sem problemas para escapar e funciona corretamente.

    
por 23.08.2015 / 11:13