Cuando ejecuto lo siguiente en mi terminal bash, funciona bien.
$ bash -c "python -c \"print 'helloworld'\""
---> hola mundo
Sin embargo, cuando intento hacer esto a través de ssh, no me da nada. ¿Alguien puede ayudarme a arrojar algo de luz sobre este problema?
$ ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""
--> nada
Respuesta1
ssh [email protected] "$(cat <<'EOT'
bash -c "python -c \"print 'helloworld'\""
EOT
)"
Tengo la idea de una función/utilidad simple que debería ayudar a evitar la pesadilla de las citas con múltiples comandos integrados como este, estad atentos ;-)
Respuesta2
No estás citando bien. tu comando
ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""
ejecuta esto en el lado remoto:
bash -c "python -c "print 'helloworld'""
que es equivalente a
bash -c "python -c print" 'helloworld'
que ejecuta python -c print
, que imprime una línea vacía. (Nota: helloworld
actúa comoeste.)
Para citar correctamente necesitas más barras invertidas. Este:
ssh [email protected] "bash -c \"python -c \\\"print 'helloworld'\\\"\""
ejecuta lo siguiente en el lado remoto:
bash -c "python -c \"print 'helloworld'\""
que es exactamente lo que querías.
Controlaresta pregunta en superusuario. Su objetivo es ayudar en casos similares.
Lo más probable es que no necesites bash -c
nada. Este código debería funcionar en un shell local:
python -c "print 'helloworld'"
entonces esto probablemente funcionará:
ssh [email protected] "python -c \"print 'helloworld'\""
Probablemente, porque el servidor SSH ejecutará el comando usando el shell elegido por meeee como su shell de inicio de sesión. En algunos casos exóticos, es posible que no funcione python -c
correctamente. Pero como esperas que se ejecute bash -c
, también debería ejecutarse.python -c