GNU/Linux >> Linux の 問題 >  >> Linux

bash スクリプトで標準入力を動的にリダイレクトする

標準入力は、特殊なデバイス ファイル /dev/stdin で表すこともできます であるため、それをファイル名として使用すると機能します。

file="/dev/stdin"
./myscript < "$file"

まず第一に、stdin はファイル記述子 1 (stdout) ではなく 0 (ゼロ) です。

次のように、ファイル記述子を複製したり、条件付きでファイル名を使用したりできます:

[[ some_condition ]] && exec 3<"$filename" || exec 3<&0

some_long_command_line <&3

示されているコマンドは、2 番目の exec を実行することに注意してください。 条件が false またはの場合 最初の exec 失敗します。潜在的な失敗を望まない場合は、 if を使用する必要があります / else :

if [[ some_condition ]]
then
    exec 3<"$filename"
else
    exec 3<&0
fi

ただし、最初のリダイレクトが失敗した場合 (条件が true になった後)、ファイル記述子 3 からの後続のリダイレクトは失敗します。


(
    if [ ...some condition here... ]; then
        exec <$fileName
    fi
    exec ./myscript
)

サブシェルで、条件付きで stdin をリダイレクトし、スクリプトを実行します。


Linux
  1. Bashスクリプトがエイリアスを認識しないのはなぜですか?

  2. フォルダから最も古いファイルを削除するためのBashスクリプト?

  3. Bashスクリプト:ファイルがテキストファイルかどうかを確認しますか?

  1. シェルスクリプトでバッファにデータを追加する方法は?

  2. Bash スクリプト:不適切なインタープリター

  3. すべての出力を Bash のファイルにリダイレクトします

  1. Bashスクリプトをファイルに接続できますか?

  2. ファイルを bash シェル スクリプトに含める方法

  3. bash スクリプトで unicode を grep する方法