Eu vi as perguntas e respostas sobre a necessidade de escape duplo dos argumentos para comandos ssh remotos. Minha pergunta é: exatamente onde e quando a segunda análise é feita?
Se eu executar o seguinte:
$ ssh otherhost pstree -a -p
Eu vejo o seguinte na saída:
|-sshd,3736
| `-sshd,1102
| `-sshd,1109
| `-pstree,1112 -a -p
O processo pai para o comando remoto ( pstree
) é sshd
, não parece haver nenhum shell que analise os argumentos da linha de comando para o comando remoto, portanto, não parece que aspas duplas ou escape seriam necessárias ( mas com certeza é). Se, em vez disso, eu ssh lá primeiro e obter um shell de login e, em seguida, executar pstree -a -p
, vejo o seguinte na saída:
├─sshd,3736
│ └─sshd,3733
│ └─sshd,3735
│ └─bash,3737
│ └─pstree,4130 -a -p
Então, claramente, há um bash
shell que faria a análise da linha de comando nesse caso. Mas no caso em que eu uso um comando remoto diretamente, não parece haver um shell, então por que aspas duplas são necessárias?