2017-03-25 5 views
2

これらの2つのBashコマンドの違いは何ですか? :これらの2つのBashコマンドの違いは何ですか?

bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered) 

curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered | bash 

最初のコマンドは、私にこのプロンプトを与えた:

Are you really sure you want to do this ? (y/N) ? 

をが、2番目はしませんでした。

答えて

6

最初のコマンドでは、bashは親から標準入力を継承します。プロンプトでコマンドを入力したと仮定すると、親はあなたの端末エミュレータの標準入力(他の変更がない場合)である対話シェルです。 2番目のコマンドで

は、bashの標準入力はbashによって実行されるスクリプトの標準入力は、curlの出力であることを意味curlの出力、ではない端末です。

確認を求めているコマンドは、標準入力が端末であることを検出した場合にのみ確認します。さらに悪いことに、スクリプトが標準入力からの読み取りを試みている場合、パイプから読み取るために競合条件がbashになると、実際にその一部を消費する可能性があります。

curlの出力をファイルに保存してから、を実際に実行する前に実行していることを確認してください(安全なもの)。 「見える」ことで

curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered > update-script 
# look at update-script 
bash update-script 

、私はどちらかを意味し、視覚的に出力を検査し、あるいは少なくともソースが提供するチェックサムとローカルで計算されたチェックサムを比較し、あなたが受信したバイトは、あなたがになっていたバイトであることを保証するために、取得する。 (これは、ネットワークの破損、man-in-the-middle攻撃などを再び防御する)

+1

+1です。最初のコマンドは、 '<(...)'の代わりに '<<(...)'(これは ' ruakh

関連する問題