Una mica de redirecció de shell
Així és com ho fem normalment la redirecció de shell
$ ./pgm.sh args >out.txt 2>err.txt
Jo volia que modificar una mica i executar de la manera
$ ./pgm.sh args
amb el requisit que la producció i l'error ha d'anar a tenir el nom a l'interior pgm.sh calcula sobre la base d'arguments. Un cas il · lustratiu podria ser quan la data és part de args. Així que li agradaria stdout per anar a dir / seu / directori / pgm_out_YYYYMMDD.txt 1
El problema amb el mode estàndard per reorientar N>file.txt és a dir, l'associació de descriptor de fitxer en al fitxer.txt, és que funciona només per al procés de nova forma de forqueta i no per al procés actual.
tan
$ echo hi 1>out.txt ; echo hii . enviarà hola a out.txt, però s'imprimirà HII a la sortida estàndard 2
Aquí és on exec ve al nostre rescat. Si a això afegim exec 1>somefile.txt llavors la sortida de la resta de la seqüència de comandaments anar a algun_archivo.txt
$. / Test.sh redirigirà alta, així com a la HII out.txt
$ cat test.sh
#!/usr/bin/env bash
exec 1>out.txt
echo hi
echo hii
Igual que redirigir stdout stderr, així com farem alguna cosa com això
cat test2.sh
exec 1>out.txt
exec 2>err.txt
echo out text
echo 1>&2 err text
somenoneexitent command
ls -ld /tmp
Ara que s'acosta de nou al punt original de tornar a dirigir a algun arxiu des de l'interior de la closca, diguem que el programa calcula el nom de l'arxiu en alguns outfile variable, podríem haver fet exec 1>$OUTFILE
Això resol el problema actual. Però vostè pot tenir gust d'anar a través de l'exemple següent, que aconsegueix el "accés aleatori" de l'arxiu de script de shell. Exemple és de aquí
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
Amb els comentaris, aquest codi és autoexplicatiu.
-
1 També es pot fer per $ ./pgm.sh args >pgm_out`date +%Y%m%d` però la idea és generar aquest nom de fitxer basat en una lògica en el programa en si.
2 1 gen> out.txt és redundant, però aclareix que aquí estem redirigint FD 1



































