標準入力は、特殊なデバイス ファイル /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 をリダイレクトし、スクリプトを実行します。