Widziałem pytania i odpowiedzi dotyczące konieczności podwójnego ucieczki argumentów do zdalnych poleceń ssh. Moje pytanie brzmi: dokładnie gdzie i kiedy wykonuje się drugie parsowanie?
Jeśli uruchomię następujące:
$ ssh otherhost pstree -a -p
W danych wyjściowych widzę następujące:
|-sshd,3736
| `-sshd,1102
| `-sshd,1109
| `-pstree,1112 -a -p
Proces nadrzędny dla polecenia zdalnego ( pstree
) polega na tym sshd
, że nie wydaje się, aby istniała tam jakaś powłoka, która analizowałaby argumenty wiersza poleceń dla polecenia zdalnego, więc nie wydaje się, że konieczne byłoby podwójne cytowanie lub zmiana znaczenia ( ale na pewno jest). Jeśli zamiast tego najpierw ssh tam i uzyskać powłokę logowania, a następnie uruchomić pstree -a -p
widzę następujące dane wyjściowe:
├─sshd,3736
│ └─sshd,3733
│ └─sshd,3735
│ └─bash,3737
│ └─pstree,4130 -a -p
Widać więc, że istnieje tam bash
powłoka, która w takim przypadku przeprowadzałaby analizę wiersza poleceń. Ale w przypadku, gdy używam polecenia zdalnego bezpośrednio, wydaje się, że nie ma powłoki, więc dlaczego podwójne cytowanie jest konieczne?