![SSH 経由で bash コマンド内で python コマンドを実行する方法](https://rvso.com/image/170641/SSH%20%E7%B5%8C%E7%94%B1%E3%81%A7%20bash%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E5%86%85%E3%81%A7%20python%20%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%92%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.png)
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
。このコードはローカル シェルで動作するはずです。
python -c "print 'helloworld'"
おそらくこれはうまくいくでしょう:
ssh [email protected] "python -c \"print 'helloworld'\""
おそらく、SSHサーバーは、ログインシェルとしてmeeeeが選択したシェルを使用してコマンドを実行するためです。一部の特殊なケースでは、python -c
正しく実行されない場合があります。ただし、実行されることを期待しているのでbash -c
、次のようにも実行されるはずです。python -c