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