La entrada estándar también se puede representar mediante el archivo de dispositivo especial /dev/stdin
, así que usarlo como nombre de archivo funcionará.
file="/dev/stdin"
./myscript < "$file"
En primer lugar, stdin es el descriptor de archivo 0 (cero) en lugar de 1 (que es stdout).
Puede duplicar los descriptores de archivo o usar nombres de archivo condicionalmente como este:
[[ some_condition ]] && exec 3<"$filename" || exec 3<&0
some_long_command_line <&3
Tenga en cuenta que el comando que se muestra ejecutará el segundo exec
si la condición es falsa o el primer exec
falla Si no desea una posible falla al hacerlo, debe usar un if
/ else
:
if [[ some_condition ]]
then
exec 3<"$filename"
else
exec 3<&0
fi
pero luego las redirecciones subsiguientes desde el descriptor de archivo 3 fallarán si la primera redirección falló (después de que la condición fuera verdadera).
(
if [ ...some condition here... ]; then
exec <$fileName
fi
exec ./myscript
)
En un subshell, redirija condicionalmente stdin y ejecute el script.