No entiendo cómo la computadora lee este comando.
cat file1 file2 1> file.txt 2>&1
Si entiendo, 2>&1
simplemente redirija el Error estándar a la Salida estándar.
Según esa lógica, el comando me dice lo siguiente:
concatenar archivos
file1
yfile2
.enviar
stdout
desde esta operación afile.txt
.enviar
stderr
astdout
.¿fin?
No estoy seguro de lo que está haciendo la computadora. Según mi lógica, el comando debería ser
cat file1 file2 2>&1 > file.txt
Pero esto no es correcto.
bash
shell
command-line
io-redirection
file-descriptors
iDontKnowBetter
fuente
fuente
$
?var=$othervar
,$
introduce el nombre de la variable en el lado derecho. En una redirección como2>&1
,&
introduce el número de descriptor de archivo en el lado derecho. Estoy diciendo que puedes pensar que "el archivo 2 es igual al archivo 1". (Pero hay dos tipos de iguales:<
significa "para leer" y>
significa "para escribir".)El orden de redireccionamiento es importante, y deben leerse de izquierda a derecha .
Por ejemplo:
command 2>&1 >somefile
significa:stderr
(es decir2
) al destino actual destdout
(en este punto, el terminal).stdout
para ir asomefile
.Entonces, en este caso,
stderr
va a la terminal ystdout
va a un archivo, que no es lo que probablemente desee.Por otro lado,
command >somefile 2>&1
significa:stdout
asomefile
stderr
al mismo destino questdout
(somefile
).En este último caso, tanto
stderr
ystdout
de ir asomefile
, que es probablemente lo que quiere.fuente
>&
En realidad significa duplicado, utiliza la llamada al sistema dup para asignar un nuevo descriptor de archivo a un archivo ya abierto.Entonces, (bash en realidad) primero debe abrir el nuevo stdout antes, diciendo "y redirigir stderr a cualquier stdout que esté configurado actualmente".
fuente
&
. ¿podría incluir algunas referencias a esa sintaxis o, mejor aún, algunos buenos recursos en el sistema dup antes mencionado?