원격 ssh 명령에 대한 인수를 두 번 이스케이프 해야하는 것에 대한 질문과 답변을 보았습니다. 내 질문은 : 정확히 어디에서 언제 두 번째 파싱을 수행합니까?
내가 다음을 실행하면 :
$ ssh otherhost pstree -a -p
출력에 다음이 표시됩니다.
|-sshd,3736
| `-sshd,1102
| `-sshd,1109
| `-pstree,1112 -a -p
원격 명령 ( pstree
) 의 부모 프로세스는입니다. sshd
명령 행 인수를 원격 명령으로 구문 분석하는 쉘이 없으므로 이중 인용 또는 이스케이프가 필요한 것처럼 보이지 않습니다 ( 그러나 그것은 확실히입니다). 대신 먼저 ssh하고 로그인 셸을 얻은 다음 실행 pstree -a -p
하면 출력에 다음이 표시됩니다.
├─sshd,3736
│ └─sshd,3733
│ └─sshd,3735
│ └─bash,3737
│ └─pstree,4130 -a -p
따라서 분명히이 경우 bash
명령 줄 구문 분석을 수행 하는 쉘이 있습니다. 그러나 원격 명령을 직접 사용하는 경우 쉘이없는 것처럼 보이므로 왜 큰 따옴표가 필요합니까?