Truputis korpuso peradresavimo

Gegužės 10, 2009 prashant · Komentarai
Filed under: technologijos

Štai kaip mes paprastai padaryti shell peradresavimą
$ ./pgm.sh args >out.txt 2>err.txt
Norėjau pakeisti, jis šiek tiek ir taip paleisti
$ ./pgm.sh args
reikalavimo, kad išėjimo ir klaidos turėtų eiti tam tikru failo vardą, apskaičiuotą args pagrįstas viduje pgm.sh. Vienas pavyzdinis atvejis galėtų būti, kai data args dalis. Taigi norėtumėte STDOUT eiti say / jūsų / katalogą / pgm_out_YYYYMMDD.txt 1

Su standartiniu būdu nukreipiant problema N>file.txt ty, derinant failo deskriptorius N į plik.txt, yra, kad jis veikia tik naujai išsišakojęs, o ne dabartiniu metu.
taip
$ echo hi 1>out.txt ; echo hii . bus išsiųsti hi į out.txt, bet spausdinti hii stdout 2

Tai kur exec ateina į mūsų gelbėjimo. Jei mes pridėti exec 1>somefile.txt tada produkcija nuo likusios scenarijaus vyks somefile.txt

$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
$. / Test.sh bus nukreipti hi kaip gerai kaip hii out.txt

Panašiai nukreipti STDOUT taip pat stderr mes padarysime kažką panašaus į tai
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp

Dabar grįžtant prie pradinio taško, nukreipiant tam tikra failą iš korpuso viduje, tegul sako, kad programa skaičiuojamas failo pavadinimą, kai kintamojo OUTFILE, mes galėjo tik padaryti exec 1>$OUTFILE

Tai išsprendžia problemą. Bet tu gali eiti per tokiu pavyzdžiu, kuriuo pasiekiamas "laisvą prieigą failo apvalkalo scenarijus. Pavyzdys yra iš čia
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

Su pastabomis, šis kodas yra savaime suprantama.
-
1 Jis taip pat gali būti padaryta $ ./pgm.sh args >pgm_out`date +%Y%m%d` , tačiau idėja yra sukurti šio failo pavadinimą, nors pačios programos logika.
2 1 1> out.txt yra nereikalingas, bet jis paaiškina, kad mes nukreipiant fd 1