Quando executo o seguinte em meu terminal bash, ele funciona bem.
$ bash -c "python -c \"print 'helloworld'\""
---> olá mundo
No entanto, quando tento fazer isso através do ssh, não recebo nada. Alguém pode ajudar a esclarecer esse problema?
$ ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""
--> nada
Responder1
ssh [email protected] "$(cat <<'EOT'
bash -c "python -c \"print 'helloworld'\""
EOT
)"
Eu tenho a ideia de uma função/utilitário simples que deve ajudar a evitar o pesadelo de citações com vários comandos incorporados como este, fique ligado ;-)
Responder2
Você não está citando certo. Seu comando
ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""
executa isso no lado remoto:
bash -c "python -c "print 'helloworld'""
o que equivale a
bash -c "python -c print" 'helloworld'
que é executado python -c print
, que imprime uma linha vazia. (Nota: helloworld
age comoesse.)
Para citar corretamente, você precisa de mais barras invertidas. Esse:
ssh [email protected] "bash -c \"python -c \\\"print 'helloworld'\\\"\""
executa o seguinte no lado remoto:
bash -c "python -c \"print 'helloworld'\""
que é exatamente o que você queria.
Verificaresta pergunta no superusuário. Destina-se a ajudar em casos semelhantes.
Você provavelmente não precisa bash -c
de nada. Este código deve funcionar em um shell local:
python -c "print 'helloworld'"
então isso provavelmente funcionará:
ssh [email protected] "python -c \"print 'helloworld'\""
Provavelmente porque o servidor SSH executará o comando usando o shell escolhido por meeee como shell de login. Em alguns casos exóticos, pode não funcionar python -c
corretamente. Mas como você espera que ele seja executado bash -c
, ele também deverá ser executadopython -c