Standardní vstup může být také reprezentován speciálním souborem zařízení /dev/stdin
, takže použití jako název souboru bude fungovat.
file="/dev/stdin"
./myscript < "$file"
Za prvé, stdin je deskriptor souboru 0 (nula) spíše než 1 (což je stdout).
Můžete duplikovat deskriptory souborů nebo používat názvy souborů podmíněně takto:
[[ some_condition ]] && exec 3<"$filename" || exec 3<&0
some_long_command_line <&3
Všimněte si, že zobrazený příkaz provede druhý exec
pokud je buď podmínka nepravdivá nebo první exec
selže. Pokud si nepřejete, aby to došlo k potenciálnímu selhání, měli byste použít if
/ else
:
if [[ some_condition ]]
then
exec 3<"$filename"
else
exec 3<&0
fi
ale pak následná přesměrování z deskriptoru souboru 3 selžou, pokud se první přesměrování nezdařilo (poté, co byla podmínka splněna).
(
if [ ...some condition here... ]; then
exec <$fileName
fi
exec ./myscript
)
V subshell podmíněně přesměrujte stdin a spusťte skript.