2011-12-16 9 views
12

"Bash - How to pass arguments to a script that is read via standard input"の投稿をもう少し拡張したいと思います。Bash - リダイレクトされた標準入力を介して読み込まれるスクリプトに引数を渡す方法

標準入力を受け取り、引数を渡しながらリモートで実行するスクリプトを作成したいと考えています。私は引数を受け、以下の方法を取ると、私のスクリプトに適用するにはどうすればよい

ssh server_name bash <&0 

は、私は建物だスクリプトの内容を簡素化?

cat script.sh | bash /dev/stdin arguments 

多分私はこれを間違ってやっています。代わりの解決策も提供してください。

+0

コマンドこのアプリケーションでは、ライン引数が不十分ですか? –

+0

'ssh server_name bash <&0 'にコマンドライン引数を指定すると、bashオプションとして解釈されません。 – dabest1

答えて

14

これを試してみてください:

cat script.sh | ssh some_server bash -s - <arguments> 
2

ssh違い作るべきではありません。

$ cat do_x 
#!/bin/sh 

arg1=$1 
arg2=$2 
all_cmdline=$* 
read arg2_from_stdin 

echo "arg1: ${arg1}" 
echo "arg2: ${arg2}" 
echo "all_cmdline: ${all_cmdline}" 
echo "arg2_from_stdin: ${arg2_from_stdin}" 

$ echo 'a b c' > some_file 
$ ./do_x 1 2 3 4 5 < some_file 
arg1: 1 
arg2: 2 
all_cmdline: 1 2 3 4 5 
arg2_from_stdin: a b c 
$ ssh some-server do_x 1 2 3 4 5 < some_file 
arg1: 1 
arg2: 2 
all_cmdline: 1 2 3 4 5 
arg2_from_stdin: a b c 
+0

申し訳ありませんが、これは私が意味するものではありません。あなたの例 'ssh some-server do_x 1 2 3 4 5 dabest1

+0

私は分かりません。 'do_x'で独自のシェルを書こうとしていますか? –

+0

提供されているスクリプトをリモートで実行するラッパースクリプトを作成しようとしています。また、パイプ入力をサポートしたいと思います。 – dabest1

0

このバリアントをccartonanswerでもうまく動作するようです:

ssh some_server bash -s - < script.sh <arguments> 
関連する問題