L'input standard può anche essere rappresentato dal file di dispositivo speciale /dev/stdin
, quindi usarlo come nome file funzionerà.
file="/dev/stdin"
./myscript < "$file"
Prima di tutto stdin è il descrittore di file 0 (zero) anziché 1 (che è stdout).
Puoi duplicare descrittori di file o utilizzare nomi di file in modo condizionale come questo:
[[ some_condition ]] && exec 3<"$filename" || exec 3<&0
some_long_command_line <&3
Nota che il comando mostrato eseguirà il secondo exec
se la condizione è falsa oppure il primo exec
non riesce. Se non vuoi che un potenziale fallimento lo faccia allora dovresti usare un if
/ else
:
if [[ some_condition ]]
then
exec 3<"$filename"
else
exec 3<&0
fi
ma poi i reindirizzamenti successivi dal descrittore di file 3 falliranno se il primo reindirizzamento fallisce (dopo che la condizione era vera).
(
if [ ...some condition here... ]; then
exec <$fileName
fi
exec ./myscript
)
In una subshell, reindirizza in modo condizionale stdin ed esegui lo script.