¿Qué significa>&?


Estaba un poco confundido por esta expresión:{[10]]}

gcc -c -g program.c >& compiler.txt

Sé que &>filename redirigirá tanto stdout como stderr a file filename. Pero en este caso el ampersand está después del signo mayor que. Se parece a su de la forma M>&N, donde M y N son descriptores de archivo.

En el fragmento de código anterior, ¿M=1 y N='compiler.txt'? ¿En qué se diferencia esto exactamente de:

gcc -c -g program.c > compiler.txt     (ampersand removed)

Entiendo que cada archivo abierto está asociado con un descriptor de archivo mayor que 2. Es este ¿correcto?

Si es así, es un nombre de archivo intercambiable con su descriptor de archivo como el objetivo de la redirección?

Author: Garrett, 2012-06-29

2 answers

Esto es lo mismo que &>. De la página de manual de bash:

Redireccionamiento de Salida Estándar y Error Estándar Esta construcción permite tanto la salida estándar (descriptor de archivo 1) y la salida de error estándar (descriptor de archivo 2) para ser redirigido a la archivo cuyo nombre es la expansión de word.

There are two formats for  redirecting  standard  output  and  standard
error:

       &>word
and
       >&word

Of the two forms, the first is preferred.  This is semantically equiva-
lent to

       >word 2>&1
 69
Author: jordanm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-10 11:10:25

&> vs >&: la versión preferida es &> (clobber)

Respecto a:

  • &>
  • >&

Ambos clobber el archivo - truncarlo archivo a 0 bytes antes de escribir en él, al igual que > file haría en el caso de solo STDIN.

Sin embargo , el bash la sección de redirecciones manuales agrega que:

De las dos formas, se prefiere la primera. Esto es semánticamente equivalente a

>word 2>&1

Cuando se usa la segunda forma, word no puede expandirse a un número o -. Si lo hace, se aplican otros operadores de redirección (consulte Duplicar descriptores de archivo más abajo) por razones de compatibilidad.

(Nota: {[49] {} en[11]} ambos son equivalentes.)

Es muy buena práctica obtener la memoria de los dedos en la primera forma (&>), porque:

Use &>> como >>& no está soportado por bash (anexar)

Solo hay una forma de anexar:

El formato para agregar salida estándar y error estándar es:

&>>word

Esto es semánticamente equivalente a

>>word 2>&1

(ver Descriptores de Archivo Duplicados más abajo).

Nota:

  • El uso clobber de &> sobre >& en la sección anterior es nuevamente recomendado dado que solo hay una forma de agregar en bash.
  • zsh permite ambas formas &>> y >>&.
 0
Author: Tom Hale,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-17 03:25:13