Nedaudz korpusa novirzīšanai
Lūk, kā mēs parasti darīt shell redirection
$ ./pgm.sh args >out.txt 2>err.txt
Es gribēju mainīt tā mazliet un palaist šādi
$ ./pgm.sh args
ar nosacījumu, ka produkcija un kļūda ir iet kaut filename aprēķināta iekšā pgm.sh pamatā args. Viens ilustratīvs gadījums varētu būt, ja diena ir daļa no args. Tātad jūs gribētu stdout iet pateikt / Jūsu / direktorija / pgm_out_YYYYMMDD.txt 1
Ar standarta veids, novirzot problēma N>file.txt ti, iesaistot failu deskriptors N file.txt, ka tas darbojas tikai nesen žuburains procesu, nevis par kārtējo procesu.
tā
$ echo hi 1>out.txt ; echo hii . nosūtīs hi out.txt bet drukāt uz stdout kompaktdisku 2
Tas ir, ja exec nāk mūsu glābšanu. Ja mēs pievienot exec 1>somefile.txt tad izejas no pārējās skripts iet uz somefile.txt
$. / Test.sh novirzīt hi, kā arī kompaktdisku ar out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Līdzīgi kā novirzīt stdout kā arī stderr mēs darīsim kaut kas līdzīgs šim
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Tagad atgriežoties sākotnējā punktā, pārprofilējot uz kādu failu no korpusa iekšpusē, teiksim programma aprēķinājusi filename dažu mainīgo OUTFILE, mēs varētu būt tikai izdarīt exec 1>$OUTFILE
Kas atrisina pašreizējo problēmu. Bet jūs varat, piemēram, lai iet caur šādu piemēru ko sasniedz meklēšanā brīva piekļuve devēju failu shell skriptu. Piemērs ir no šeit
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
Ar komentāriem, šis kods ir pašsaprotami.
-
1 To var izdarīt ar $ ./pgm.sh args >pgm_out`date +%Y%m%d` bet ideja ir radīt šo faila nosaukumu, pamatojoties uz kādu loģiku pati programma.
2 1 1> out.txt ir lieks, bet tas izskaidro, ka mēs esam pārprofilējot FD 1



































