¿Por qué no aparece el "Permiso denegado" en stderr?

¿Por qué no aparece el "Permiso denegado" en stderr?

Tengo un comando: mywritercmd -f /tmp/test 2>&1 > log.txtlo ejecuto en una terminal bash, el comando regresaerror: could not open output file "/tmp/test": Permission denied

Sin embargo, este mensaje de error no está escrito en elregistro.txtarchivo, se queda vacío...

¿Por qué?

Habría adivinado que este mensaje debería ir a stderr y luego al archivo, pero de alguna manera no es así.

Respuesta1

Hacer el pedido causa la diferencia. La línea de comando se evalúa de izquierda a derecha. Cuando llega 2>&1, la instrucción es entregar stderr a donde quiera que vaya stdout. En este punto, la > log.txtpieza aún no ha sido evaluada. Como resultado, el stderr permanece en el valor predeterminado, que es enviarlo al terminal.

mywritercmd -f /tmp/test > log.txt 2>&1dará como resultado el comportamiento que desea y hará que el mensaje de error se escriba en el archivo log.txt.

información relacionada