No entiendo cómo la computadora lee este comando.
cat file1 file2 1> file.txt 2>&1
Si entiendo, 2>&1simplemente redirija el Error estándar a la Salida estándar.
Según esa lógica, el comando me dice lo siguiente:
concatenar archivos
file1yfile2.enviar
stdoutdesde esta operación afile.txt.enviar
stderrastdout.¿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 >somefilesignifica:stderr(es decir2) al destino actual destdout(en este punto, el terminal).stdoutpara ir asomefile.Entonces, en este caso,
stderrva a la terminal ystdoutva a un archivo, que no es lo que probablemente desee.Por otro lado,
command >somefile 2>&1significa:stdoutasomefilestderral mismo destino questdout(somefile).En este último caso, tanto
stderrystdoutde 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?