Nedaudz korpusa novirzīšanai

10 maijs 2009 ar Prashant · Komentāri
Iesniegts saskaņā ar: tehnoloģija

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.

$ 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

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$. / Test.sh novirzīt hi, kā arī kompaktdisku ar out.txt

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