¿Cómo canalizo el flujo de error estándar sin canalizar el flujo de salida estándar?
Sé que este comando funciona, pero también escribe el estándar.
Command 2>&1 | tee -a $LOG
¿Cómo obtengo solo el error estándar?
Nota: Lo que quiero sacar de esto es simplemente escribir la secuencia stderr en un registro y escribir tanto stderr como stdout en la consola.
tee.exe
instalado :)El comando Unix / Linux de Kyle hace el trabajo de cambiar el STDERR con el STDOUT; Sin embargo, la explicación no es del todo correcta. Los operadores de redireccionamiento no copian ni duplican, simplemente redirigen el flujo a una dirección diferente.
Reescribir el comando de Kyle moviendo temporalmente el 3> & 1 hasta el final, facilitaría la comprensión del concepto:
Sin embargo, escrito de esta manera, Linux mostraría un error porque & 3 aún no existe, ya que se encuentra antes de 3> & 1. 3> algo es una forma de declarar (definir) que vamos a usar una tercera tubería, por lo que debe ubicarse antes de que fluya agua en esa tubería, por ejemplo, la forma en que Kyle lo escribió. Pruebe esto de otra manera solo por diversión:
No tener una forma de hacer copias es una pena. No puede hacer cosas como "3> & 1 3> & 2" en el mismo comando, porque Linux solo usará el primero encontrado y descartará el segundo.
No he encontrado (todavía) una forma de enviar tanto el error como la salida regular a un archivo y también enviar una copia del error a la salida estándar con un comando. Por ejemplo, tengo un trabajo cron que quiero que ambas salidas (error y estándar) vayan a un archivo de registro y dejen que el error también salga para hacer un mensaje de correo electrónico enviado a mi BlackBerry. Puedo hacerlo con dos comandos usando "tee" pero el error no se muestra en el orden correcto entre la línea de salida regular en el archivo. Esta es la forma fea en que resolví el problema:
Tenga en cuenta que tengo que usar log1 dos veces y tengo que agregar en ambos casos, el primero usando la opción "-a" para el comando "tee" y el segundo usando ">>".
Al hacer un gato log1 obtienes lo siguiente:
Observe que el error no se muestra en la segunda línea como debería.
fuente
mult_ios
opción ( activada de manera predeterminada) para poder redirigir un FD varias veces.de acuerdo con la página de manual de ksh (pdksh), puede hacer lo siguiente:
Comando 2> & 1> / dev / null | gato -n
es decir, dup stderr a stdout, redirigir stdout a / dev / null, luego canalizar a 'cat -n'
funciona en pdksh en mi sistema:
fuente
Lo ejecuté como siempre quisiste, ya que también lo necesitaba y refiné tu comando. ahora para mí funciona correctamente usando bash 3.2 en debian squeeze usando esto
mientras que log1 registra stdout y stderr y log2 solo registra stderr y nada más lo pone en pantalla.
fuente