Bashの対話型検出に関する質問

Bashの対話型検出に関する質問

Bashの対話型検出について質問があります。

次のスクリプトは、対話型モードで呼び出されるかどうかに関係なく印刷されます。

$ cat int.sh 
#!/bin/bash

if [ -t 0 ]; then
    echo "interactive"
else
    echo "not interactive"
fi

通貨のいくつかの例...

$ ./int.sh 
interactive
$ echo toto | ./int.sh
not interactive
$ ./int.sh < ./int.sh
not interactive
$ ./int.sh <<EOF
> hello world!
> EOF
not interactive

しかし、次のケースの結果がインタラクティブなのはなぜですか?

$ ./int.sh <( cat ./int.sh )
interactive

ベストアンサー1

Bashの声明は次<(...)のとおりです。プロセスの交換。プロセスが<(...)実行されると、対応する入力または出力がFIFOまたはファイルに接続されます/dev/fd。確認してください:

echo <(echo foo)

それはそのようなものを印刷します/dev/fd/63。これがファイル記述子です。その後、その<(...)部分は対応するファイル記述子に置き換えられます。したがって、宣言では、呼び出しは次のようになります。

./int.sh <( cat ./int.sh )

次に交換:

./int.sh /dev/fd/63

したがって、これはスクリプトのパラメータにすぎず、./int.sh依然として対話的に呼び出されます。

おすすめ記事