リモートサーバーに_/root/test.sh
_があり、次の内容があります。
_#!/bin/bash
date
_
リモートサーバーで、次の出力を取得します。
_# ./test.sh
Fri Dec 18 07:41:10 EST 2015
# bash <(cat /root/test.sh)
Fri Dec 18 07:41:23 EST 2015
_
ただし、ローカルマシンから同じコマンドを実行しようとすると、次の結果が得られます。
_$ ssh root@remote_server /root/test.sh
Fri Dec 18 07:44:32 EST 2015
$ ssh root@remote_server bash <(cat /root/test.sh)
cat: /root/test.sh: No such file or directory
bash: /dev/fd/63: No such file or directory
_
では、最後の実行の問題は何ですか?このbash <(cat /root/test.sh)
のようなスクリプトを実行するのはおかしいかもしれません。私がそれをした理由は、それが私の実際の状況を簡略化したバージョンだからです。私の本当のコードは、インターネットからBashスクリプトをダウンロードしてローカルで実行することです。さまざまなパラメーターで実行するマシンがたくさんあるので、ローカルコンピューターから実行しようとしています。
このようなファイル記述子をssh
を介して渡すことはできません。 <(...)
構築は、システム上に仮想ファイルを作成し、リモートシステム上で実行する場合は意味がありません。
本当に使用したい場合は、引用符で囲みます。bashがある場合は、リモートシステムで評価されます。
ssh root@remote_Host "bash <( cat /root/test.sh )"
私の提案は、リモートホスト(/root/test.sh
)実行可能にします(chmod u+x /root/test.sh
)そして次のように実行します
ssh root@remote_server /bin/bash -c /root/test.sh
約 /bin/bash: /dev/fd/63: No such file or directory
この回答の理由を読むことができます [ 1 ]。
注意:
フルパス(/bin/bash
)コマンド名(bash
)だけではなく、不要なセキュリティリスクを回避する [ 2 ]。
別の方法は
ssh root@remote_server << EOF
cat /root/test.sh
# whatever else
EOF
それは2番目のEOFまで各行を実行します...あなたはそれについてあなたのバリアントを行うことができます...