Я видел вопросы и ответы о необходимости двойного экранирования аргументов для удаленных команд 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
оболочка, которая в этом случае будет выполнять синтаксический анализ командной строки. Но в случае, когда я использую удаленную команду напрямую, оболочки, похоже, не существует, так почему же нужна двойная кавычка?