escaping awk za pomocą zdalnej komendy ssh i bash, który jest już escap

1

Cześć.

ssh ufk@10.0.0.2  "bash -lc 'pm2 list | grep app | awk { print $3} '"

Muszę uruchomić polecenie, które tutaj wkleiłem. problem polega na tym, że już dwa razy uciekam ... "uderzenie z i pm2 z '. jak mogę uciec od awk?

wiem, że zadziała, jeśli wyjdę z awk „{print $ 3}”, ale polecenie all zostało już dwukrotnie zastąpione ... więc ... co mam zrobić?

aktualizacja

utworzyłem następujące polecenie bash:

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

tutaj otrzymuję odpowiedni wiersz z listą wszystkich pm2, to tak, jakby awk nigdy nie był wykonywany.

ufk
źródło
1
awkmoże zrobić większość przypadków grepi naprawdę nie potrzebujesz tych zrobionych zdalnie, więc ssh u@h "bash -lc 'pm2 list' " | awk '/app/{print $3}'też będzie działać
dave_thompson_085
dzięki @ dave_thompson_085, pomogłeś mi rozwiązać problem
ufk

Odpowiedzi:

1

Nie można usuwać ukośników pojedynczych cudzysłowów w ciągach pojedynczych cudzysłowów, ale można wstawiać podwójne cudzysłowy w odwrotnym ukośniku wewnątrz ciągów podwójnych. Więc możesz to zrobić:

ssh ufk@10.0.0.2  "bash -lc \"pm2 list | grep app | awk '{ print \\\$3 }'\""

Musisz dwukrotnie uciec z $ w programie awk, aby uniknąć rozszerzenia $ 3, najpierw przez lokalną powłokę, a następnie przez zdalną.

rici
źródło
próbuję to przetestować .. wciąż otrzymuję całą linię z 'grep app', to tak jakby awk nie był w ogóle
wywoływany
@ufk: Przepraszamy.
Edytowałem
zaktualizowany post główny. wciąż nie działa. dzięki za pomoc do tej pory
ufk
1

dzięki @ dave_thompson_085 za komentarz, który pomógł mi rozwiązać problem.

używam następującego polecenia:

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

jak widać tutaj, używam listy pm2 na serwerze usuwania, a resztę robię lokalnie. bez kłopotów z ucieczką i działa poprawnie.

ufk
źródło