В bash вы можете открыть файл с помощью команды 'exe c'. Предполагая, что нет других входных файлов, вы можете перенаправить стандартный ввод. Если stdin используется для чего-то другого, попробуйте открыть файл в другом файловом дескрипторе (3, 4, ...). Вы не можете использовать 0, 1 и 2, и они уже связаны с stdin / stdout / stderr.
Использование stdin:
exec < filename
read ...
if [ ... ] ; then
read ...
fi
# Close
exec <&-
Использование другого дескриптора файла
exec 3<filename
read -u3 ...
if [ ... ] ; then
read -u3 ...
fi
exec 3<&-
Обратите внимание, что в отличие от других сред, код должен выбирать отдельный дескриптор файла для использования, что может быть сложно, если есть много файлов, которые нужно открыть одновременно. Лучшее решение, основанное на комментарии @wjandrea
exec {myfile}<filename
read -u$myfile ...
if [ ... ] ; then
read -u$myfile ...
fi
exec $myfile<&-