Описание тега the-law-of-ueki
Вы можете поставить переадресацию на любой позиции в простую команду (например, ссылаться на псевдонимы, функции, строение или исполняемый файл с параметрами). С другой стороны, если вы хотите применить перенаправление на составные команды, редиректы должны прийти позже. Это, как синтаксис оболочка предназначена. Например, следующие утверждения эквивалентны:
аргумент <mycommand myinput
аргумент mycommand <myinput
аргумент mycommand <myinput
если перенаправления не может быть перемещен в
в то время как ...; не ...; сделано <myinput
{ КОМАНДА1; команда2; } <myinput
Вы можете только применить перенаправление в составной команде, если он заканчивается с сайта или с пунктуацией. Чтобы применить перенаправление на что-то вроде Фу && бар
или ФОО; бар
или файл foo | бар
, размещение команды в фигурные скобки, например
{ ФОО && бар; } <myinput
Сценарии
во время чтения; не
эхо "$а"
сделано <мой_файл
и
пока читал <файл myfile; делать
эхо "$а"
сделано
как синтаксически правильно, но второе не делать ничего полезного. Оператор перенаправления на команду означает:
- Откройте указанный файл.
- Прикрепить указанный файл в необходимый файл дескриптора (например, 0 для
<
). - Выполните команду.
- Закрыть дескриптор файла.
Так что читать <файл myfile
открывает файл на каждой итерации, это означает, что он продолжает чтение первой строки навсегда.
Если вы хотите использовать во время чтения цикла и хотите сохранить окружающие стандартного ввода для теле цикла чтения из разных дескриптора файла.
пока читал <&3; сделать
# команды, которые могут использовать устройства stdin
сделали 3<мой_файл
Перенаправление оператора <&3
просто делает файл дескриптора дублирования, это не “открыть файл снова” в вышесказанное, нет Шаг 1.