當我在 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