Aparentemente no conozco todos los destinos de salida que están disponibles para su uso. Sé sobre stdout( &1) y stderr( &2). Sin embargo, después de redirigir ambos descriptores, a veces aún obtengo algo de salida en mi consola.
El ejemplo más fácil que se me ocurre es GNU Parallel; Cada vez que lo uso, veo un aviso de cita. Incluso cuando lo hago &2>1 > file, todavía veo el aviso.
Y lo mismo se aplica a emerge: cuando ejecuto emerge y hay algunos problemas, algunas informaciones no se imprimen en stdoutni stdin, ya que las redirijo y aún así pasan.
Principalmente resuelvo estos problemas usando script, pero todavía me pregunto qué está causando este problema.
bash
terminal
io-redirection
MatthewRock
fuente
fuente

/dev/tty.parallel:mkdir ~/.parallel; touch ~/.parallel/will-citedeshabilitará el mensaje molesto. Alternativamente, busque otras implementaciones deparallel.parallelcomo ejemplo.Respuestas:
La sintaxis que usó es incorrecta.
se dividirá como
Esta voluntad:
cmdcomo un trabajo en segundo plano sin redireccionamientosstderra un archivo literalmente llamado1y redirigirástdoutafileLa sintaxis que desea es:
El orden de las operaciones es importante. Esta voluntad:
stdoutafilestderra&1- es decir, el mismo identificador de archivo questdoutEl resultado es que ambos
stderrystdoutserán redirigidos afile.En
bash, una sintaxis más simple no estándar (y, por lo tanto, no la recomiendo, por razones de portabilidad)cmd &> filehace lo mismo.fuente
/dev/tty, pero espero que esto no suceda con demasiada frecuencia (si es que lo hace).atcomando en su máquina y tiene privilegios para usarlo, puede ejecutar el comando a través deat now. Vea la página de manual para más detalles. Esto ejecutará el comando a través de un mecanismo de proceso por lotes y el proceso nunca tendrá un tty para escribir. Pero, en general, no me preocuparía por este caso límite. Por lo general, solo los procesos que requieren interacción y deliberadamente necesitan mostrar cosas a los usuarios a pesar de la redirección/dev/tty.Hay dos problemas
El primero es que el orden importa, el segundo es
/dev/tty.Usemos este script como un script de ejemplo del que queremos capturar resultados:
test.sh:Ahora veamos las salidas de los comandos:
./testmyscript.sh 2>&1 >/dev/null:Debido a que el orden de evaluación es de izquierda a derecha, primero obtenemos "redirigir
stderra dondestdoutsea que salga (por lo tanto, salida de consola)". Luego tenemos "redirigirstdouta/dev/null. Terminamos con una situación como esta:stdout->/dev/nullstderr-> consolaEntonces lo hacemos bien:
./testmyscript.sh >/dev/null 2>&1Y obtenemos:
ttdada.Ahora hacemos "Redirigir
stdouta/dev/null" y luego "Redirigir stderr a donde apunta stdout" (entonces,/dev/null). ¡Hurra!Sin embargo, todavía tenemos un problema; programa imprime a
/dev/tty. Ahora no sé cómo solucionar este tipo de comportamiento, por lo que es muy probable que lo necesitesscript, pero espero que este comportamiento no ocurra con demasiada frecuencia.fuente