He visto las preguntas y respuestas sobre la necesidad de escapar doblemente de los argumentos a los comandos ssh remotos. Mi pregunta es: ¿exactamente dónde y cuándo se realiza el segundo análisis?
Si ejecuto lo siguiente:
$ ssh otherhost pstree -a -p
Veo lo siguiente en la salida:
|-sshd,3736
| `-sshd,1102
| `-sshd,1109
| `-pstree,1112 -a -p
El proceso principal para el comando remoto ( pstree
) es sshd
que no parece haber ningún shell allí que esté analizando los argumentos de la línea de comando al comando remoto, por lo que no parece que sea necesaria una doble cita o escape ( pero definitivamente lo es). Si, en cambio, ssh allí primero y obtengo un shell de inicio de sesión, y luego ejecuto pstree -a -p
, veo lo siguiente en la salida:
├─sshd,3736
│ └─sshd,3733
│ └─sshd,3735
│ └─bash,3737
│ └─pstree,4130 -a -p
Entonces, claramente hay un bash
shell allí que analizaría la línea de comandos en ese caso. Pero en el caso en que utilizo un comando remoto directamente, no parece haber un shell, entonces, ¿por qué es necesaria una doble cita?