当我在 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'\""
这正是你想要的。
查看关于超级用户的这个问题。它旨在为类似情况提供帮助。
bash -c
您很可能根本不需要。此代码应该在本地 shell 中运行:
python -c "print 'helloworld'"
所以这可能会起作用:
ssh [email protected] "python -c \"print 'helloworld'\""
可能是因为 SSH 服务器将使用 meeee 选择的 shell 作为登录 shell 来运行命令。在某些特殊情况下,它可能无法python -c
正常运行。但既然你期望它运行bash -c
,它也应该运行python -c