업데이트

업데이트

안녕하세요.

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

여기에 붙여넣은 명령을 실행해야 합니다. 문제는 내가 이미 두 번 탈출하고 있다는 것입니다 ... bash with "와 pm2 with '. 어떻게 탈출할 수 있나요?

awk '{ print $3 }'로 이스케이프하면 작동할 것이라는 것을 알고 있지만 all 명령은 이미 두 번 이스케이프되었습니다. 그래서 .. 어떻게 해야 합니까?

업데이트

나는 다음 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 }'\""

$3이 확장되는 것을 방지하려면 awk 프로그램에서 $를 두 번 이스케이프해야 합니다. 먼저 로컬 쉘에 의해, 그 다음 원격 쉘에 의해 확장됩니다.

답변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 목록을 사용하고 나머지는 로컬에서 수행하고 있습니다. 탈출하는 데 번거로움이 없으며 제대로 작동합니다.

관련 정보