Мало љуске преусмеравању
Ево како ми то обично схелл преусмеравање
$ ./pgm.sh args >out.txt 2>err.txt
Желео сам да га измените мало и покренути на следећи начин
$ ./pgm.sh args
са захтевом да излаз и грешку Иди до неког фајла унутар пгм.сх израчунате на основу аргс. Један илустративан случај би могао бити датум када је део аргс. Дакле, желите стдоут да идем да кажем / ваш / директоријум / пгм_оут_ИИИИММДД.ткт 1
Проблем са стандардног начина преусмеравања N>file.txt тј, дружење филе дескриптор Н до филе.ткт, је да то ради само за ново одвојен процес, а не за текући процес.
тако
$ echo hi 1>out.txt ; echo hii . ће Хи послати оут.ткт али ће штампати диска на стдоут 2
Ово је место где exec долази у наш спас. Ако томе додамо exec 1>somefile.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
Сада враћају на почетну тачку преусмеравање на неку датотеку из унутрашњости шкољке, рецимо Програм израчунава име фајла у неком променљивом ОУТФИЛЕ, могли смо само урадио 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> оут.ткт је сувишна, али то овде појашњава да смо преусмеравање ФД 1



































