Как запустить команду python внутри команды bash через ssh

Как запустить команду python внутри команды bash через ssh

Когда я запускаю следующую команду в терминале bash, все работает нормально.

$ bash -c "python -c \"print 'helloworld'\""---> привет мир

Однако когда я пытаюсь сделать это через SSH, ничего не получается. Может ли кто-нибудь пролить свет на эту проблему?

$ ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""--> ничего

решение1

ssh [email protected] "$(cat <<'EOT'
bash -c "python -c \"print 'helloworld'\""
EOT
)"

У меня есть идея простой функции/утилиты, которая должна помочь избежать кошмара с цитированием при использовании нескольких встроенных команд, подобных этой. Оставайтесь с нами ;-)

решение2

Вы не правильно цитируете. Ваша команда

ssh [email protected] "bash -c \"python -c \"print 'helloworld'\"\""

запускает это на удаленной стороне:

bash -c "python -c "print 'helloworld'""

что эквивалентно

bash -c "python -c print" 'helloworld'

который запускает python -c print, который печатает пустую строку. (Примечание: helloworldдействует какэтот.)


Чтобы правильно цитировать, нужно больше обратных косых черт. Это:

ssh [email protected] "bash -c \"python -c \\\"print 'helloworld'\\\"\""

на удаленной стороне выполняется следующее:

bash -c "python -c \"print 'helloworld'\""

именно то, что вы хотели.

Проверятьэтот вопрос на Super User. Он призван помочь в подобных случаях.


Скорее всего, вам это вообще не нужно bash -c. Этот код должен работать в локальной оболочке:

python -c "print 'helloworld'"

так что это, вероятно, сработает:

ssh [email protected] "python -c \"print 'helloworld'\""

Вероятно, потому что сервер SSH запустит команду, используя оболочку, выбранную meeee в качестве оболочки входа. В некоторых экзотических случаях она может работать некорректно python -c. Но поскольку вы ожидаете, что она запустится bash -c, она также должна запуститьсяpython -c

Связанный контент