Немного перенаправления консоли
Вот как мы обычно перенаправления консоли
$ ./pgm.sh args >out.txt 2>err.txt
Я хотел, чтобы изменить его немного и запустить следующим
$ ./pgm.sh args
с требованием вывода и ошибка должна пойти на некоторые файла вычисляется внутри pgm.sh на основе аргументов. Один показательный случай, когда может быть дата является частью аргументов. Таким образом, вы хотели бы пойти стандартный вывод сказать / ваш / каталог / pgm_out_YYYYMMDD.txt 1
Проблема с стандартным способом переориентации N>file.txt т.е., связывая дескриптор файла N для file.txt, является то, что он работает только для вновь раздвоенной процесс, а не для текущего процесса.
так
$ echo hi 1>out.txt ; echo hii пошлю привет с out.txt, но будет печатать HII на стандартный вывод. 2
Это где exec приходит к нам на помощь. Если мы добавим exec 1>somefile.txt то выход из остальной части скрипта пойдет на somefile.txt
$. / Test.sh будет перенаправлять привет, а также HII в out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Аналогичным образом перенаправить стандартный вывод, а также зЬйегг мы сделаем что-то подобное
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Теперь вернуться к исходной точке перенаправление на какой-либо файл из внутри корпуса, скажем, программу вычислить имя файла в какой-либо переменной OUTFILE, мы могли бы просто сделать exec 1>$OUTFILE
Это решает текущие проблемы. Но вы можете, как пройти следующий пример, который достигает "случайного доступа" файла в скрипт. Пример от сюда
echo 1234567890 > File # Write string to "File".
exec 3<> File # Open "File" and assign fd 3 to it.
read -n 4 <&3 # Read only 4 characters.
echo -n . >&3 # Write a decimal point there.
exec 3>&- # Close fd 3.
cat File # ==> 1234.67890
В комментарии, этот код сами за себя.
-
1 Она также может быть сделано путем $ ./pgm.sh args >pgm_out`date +%Y%m%d` , но идея создания этого файла на основе какая-то логика в саму программу.
2 1 в 1> out.txt является излишним, но он уточняет, что здесь мы перенаправления FD 1



































