So führen Sie einen Python-Befehl innerhalb eines Bash-Befehls über SSH aus

So führen Sie einen Python-Befehl innerhalb eines Bash-Befehls über SSH aus

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: helloworldwirkt 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 -cdas 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 -crichtig läuft. Aber da Sie erwarten, dass es läuft bash -c, sollte es auch laufenpython -c

verwandte Informationen