L'entrée standard peut également être représentée par le fichier de périphérique spécial /dev/stdin
, donc l'utiliser comme nom de fichier fonctionnera.
file="/dev/stdin"
./myscript < "$file"
Tout d'abord, stdin est le descripteur de fichier 0 (zéro) plutôt que 1 (qui est stdout).
Vous pouvez dupliquer des descripteurs de fichiers ou utiliser des noms de fichiers de manière conditionnelle comme ceci :
[[ some_condition ]] && exec 3<"$filename" || exec 3<&0
some_long_command_line <&3
Notez que la commande affichée exécutera le second exec
si la condition est fausse ou le premier exec
échoue. Si vous ne voulez pas qu'un échec potentiel le fasse, vous devez utiliser un if
/ else
:
if [[ some_condition ]]
then
exec 3<"$filename"
else
exec 3<&0
fi
mais les redirections suivantes à partir du descripteur de fichier 3 échoueront si la première redirection a échoué (après que la condition était vraie).
(
if [ ...some condition here... ]; then
exec <$fileName
fi
exec ./myscript
)
Dans un sous-shell, redirigez conditionnellement stdin et exécutez le script.