2012-04-01 11 views
9

は、私は、スクリプトがあるとします。my_script.sh実行スクリプトは標準入力(のLinux /シェルスクリプト)からパイプ

代わりの

./my_script.sh 

を行うには、私のような何かをしたい:

cat my_script.sh | <some command here> 

スクリプトが実行されるようにします。これは可能ですか?

私が実行したいスクリプトがwgetやs3catなどの出力である場合は、ユースケースです。今は一時ファイルに保存し、実行可能ファイルに変更してから実行します。それを直接行う方法はありますか?例えば、お気に入りのシェルに

+1

あなたがこれを行うことは非常に注意する必要があります。スクリプト内の何かがstdinから読み込まれた場合(例えば、ユーザに "Yes/No"を促すコマンド)、スクリプト*から行*を消費し、その行は実行されません。 –

答えて

15

ジャストパイプを、:

$ cat my_script.sh 
set -x 
echo hello 
$ cat my_script.sh | sh 
+ echo hello 
hello 

set -xは、シェルが、それはそれを実行する前に実行しようとしてデバッグするのに便利である各ステートメントをプリントアウトしますが、それは何の関係もありません。特にあなたの問題をどうする - ちょうどそこにデモの目的のために)

+0

この答えは、bashにはなじみのない方のためです。コマンドの 'set -x'部分が何を成し遂げているのか、それがソリューションの不可欠な部分であるのか、できるよ。 –

+0

明確化。 (そこに特有のbashはありません。すべてのPOSIXシェルで 'set -x'が利用可能でなければなりません) – Mat

+1

このスクリプトでシェルタイプを"#! "もの、それは私がそれにパイプをどのようなシェルをオーバーライドしますか? – Switch

3

あなたが使用することができます

cat my_script.sh | xargs -i <some_command> {} 

かを:

cat my_script.sh | bash - 
1

RVMはrun their installerに、この方法をお勧めします。

bash -s stable < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)