Ubuntu 14.04で次のスクリプトを実行しています。
#!/bin/bash
apt-get purge -y nginx
apt-get install -y nginx
date
このように実行すると、cat /tmp/script | bash
apt-getはインストールを開始し、「日付」(実際の日付ではなくコマンド名)を印刷し、残りのapt-get出力を印刷します。
しかし、このようにスクリプトを実行すると、期待/tmp/script
どおりに機能します。 apt-getが完了すると、日付が印刷されます。
なぜこれが起こるのですか? bashを直接呼び出すときとパイプで接続するときに同じ方法で動作させるにはどうすればよいですか?
答え1
個々のコマンドの標準入力を閉じるかリダイレクトする必要があります。
#!/bin/bash
apt-get purge -y nginx <&-
apt-get install -y nginx <&-
date
それ以外の場合は、後続の行がコマンドに入力されます。