Wenn ich Folgendes in meinem Bash-Terminal ausführe, funktioniert es einwandfrei.
$ bash -c "python -c \"print 'helloworld'\""
---> hallo Welt
Wenn ich dies jedoch über SSH versuche, passiert nichts. Kann jemand helfen, Licht in die Sache zu bringen?
$ ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""
--> nichts
Antwort1
ssh [email protected] "$(cat <<'EOT'
bash -c "python -c \"print 'helloworld'\""
EOT
)"
Ich habe die Idee einer einfachen Funktion/eines einfachen Dienstprogramms, das/das dabei helfen sollte, den Anführungszeichen-Alptraum mit mehreren eingebetteten Befehlen wie diesem zu vermeiden. Bleiben Sie dran ;-)
Antwort2
Sie zitieren nicht richtig. Ihr Befehl
ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""
führt dies auf der Remote-Seite aus:
bash -c "python -c "print 'helloworld'""
Das ist gleichbedeutend mit
bash -c "python -c print" 'helloworld'
das ausführt python -c print
, was eine leere Zeile ausgibt. (Hinweis: helloworld
wirkt wieDas.)
Um richtig zu zitieren, braucht man mehr Backslashes. Diesen:
ssh [email protected] "bash -c \"python -c \\\"print 'helloworld'\\\"\""
führt Folgendes auf der Remote-Seite aus:
bash -c "python -c \"print 'helloworld'\""
und das ist genau das, was Sie wollten.
Überprüfendiese Frage auf Super UserEs soll in ähnlichen Fällen helfen.
Wahrscheinlich brauchen Sie bash -c
das gar nicht. Dieser Code sollte in einer lokalen Shell funktionieren:
python -c "print 'helloworld'"
also wird das hier wahrscheinlich funktionieren:
ssh [email protected] "python -c \"print 'helloworld'\""
Wahrscheinlich, weil der SSH-Server den Befehl mit der Shell ausführt, die meeee als Login-Shell gewählt hat. In einigen exotischen Fällen kann es sein, dass es nicht python -c
richtig läuft. Aber da Sie erwarten, dass es läuft bash -c
, sollte es auch laufenpython -c