Bashオプションとインタラクティブシェル

Bashオプションとインタラクティブシェル

bashの-sオプションは実際には何もしないようです。

コマンドを実行しても何の変更もありません。本当に混乱しているのは、シェルスクリプトを実行すると常にインタラクティブシェルが表示されるようです。スクリプトで読み取り組み込み関数を使用すると、常に入力するように求められますので、対話型であるとします。これで対話型になりますか?

シェルスクリプトはFedoraでインタラクティブに実行されますか? -sが違いを生み出す例はありますか?マニュアルページを読んだが効果的な例を直接生成することはできないようです。 sを使用してスクリプトが入力を受け取る方法を変更しようとしているので、両方の質問をマージし、いくつかのチュートリアルでは効果があると言います。私はそれがパラメータを設定できることを知っています。私が理解していないのは、常にやっているように見えるstdinで読むように変更する方法です。

私がテストした内容です。

if [ -v $PS1 ]
then
  echo non-interactive
else
  echo interactive
fi
read ; echo $REPLY

読み取りは常に非対話型シェルで動作します。

非対話型シェルでfd / 0とfd / 1の存在をテストしてもまだ存在します。

事前にありがとう

ベストアンサー1

Bashは、入力/出力が端末に接続されていることを確認して、対話型であるかどうかを判断します。

非対話-s型スイッチを使用すると、bashスクリプトがファイルからコマンドを読み取るときに位置引数を処理できます。たとえば、

$ cat demo.sh
echo '$0 = ' $0
echo '$1 = ' $1
echo '$2 = ' $2

$ bash < demo.sh foo bar
bash: foo: No such file or directory

$ bash -s < demo.sh foo bar
$0 =  bash
$1 =  foo
$2 =  bar

おすすめ記事