Estoy viendo la salida de mi comando complicado less, el problema es que stderrse pierde. stderrlas líneas normalmente se enumeran entre stdoutlíneas dentro less. Me gustaría que se imprimieran en la consola, y cuando salga less, para verlos allí juntos.
Me doy cuenta de que podría no haber una solución a esto, leí acerca de esto teey multiteehasta ahora no he tenido suerte.

stderrse redirige astdout, toda la salida astderrse mezclará con la salida normal activadastdout. La canalización de esa salidalessmostrará ambos.lesspara volver a pintar la pantalla.Respuestas:
Tal vez
Apéndice
A continuación se presenta una aclaración para las personas que no leen cuidadosamente la pregunta y que no leyeron el comentario aclaratorio del OP anterior.
haelix señaló:
y, en un comentario para quienes respondieron temprano, escribió:
El problema probablemente sea específico de la plataforma, ciertamente es algo que he experimentado en plataformas Unix SVR4 más antiguas.
Si, en tales plataformas, haces algo como
cualquier mensaje de error (por ejemplo, permisos de directorio) aparece así en menos
para que las líneas de salida estén oscurecidas por mensajes de error.
Si actualiza la página, las líneas de salida se muestran correctamente pero pierde los mensajes de error. Cuando salga menos, la pantalla se borrará excepto por un símbolo del sistema.
Si haces algo como
Los mensajes de error se entremezclan con la salida estándar. De nuevo, cuando salga menos, la pantalla estará vacía.
Si primero desea examinar solo la salida estándar en menos, luego ver los mensajes de error después de salir menos, necesita una solución diferente.
Eso es lo que sugería tentativamente en mi respuesta original de dos líneas.
fuente
Tienes que redirigir
stderrastdout:Consulte el manual de su shell (p
man bash. Ej .)fuente
solo dígale al shell que redirija fd 2 a fd 1 (stderr a stdout)
fuente
Una cosa que faltaba en todas las respuestas hasta ahora es la razón, por qué esto está sucediendo. El problema aquí es algún tipo de condición de carrera entre el proceso que genera cosas
stderrylessmuestra la salida desdestdoutel terminal. Silesscomienza a mostrarse después de que toda la salidastderrha sido impresa en el terminal, lalessconservará y podrá ver los mensajes después de salirless. OTOH silessya ha comenzado a mostrar cosas, los mensajes de error se entremezclan conlessla salida y no se conserva nada después de laslesssalidas (porquelesssolo conserva el terminal como estaba antes de que comenzara y no sabe nada sobre los mensajes de error que se interpusieron).Puede ver eso fácilmente, si lo hace, por ejemplo
Todos los mensajes de error "Permiso denegado" se mezclan con la
lesssalida y no habrá nada después de salir. Si lo hacesTodos (o al menos la mayoría) de los mensajes de error se han impreso en el terminal antes de tener la
lessoportunidad de mostrar la salida y luego verá los mensajes de error.Por supuesto, generalmente no desea esperar 10 segundos antes de comenzar
less, pero con Linux también puede proporcionar valores fraccionales para el tiempo de espera, y con procesos de ejecución rápida a menudo, algo tan poco comosleep 0.1es suficiente para evitar la condición de carrera. (Pero, por supuesto, si quiere o tiene que estar del lado realmente seguro, use la solución de RedGrittyBrick).fuente
Debe comprender el concepto de "descriptores de archivo". Por lo general, una aplicación de Unix comenzará con tres descriptores de archivo especiales:
La "tubería"
|en el shell se conectastdoutde un proceso constdinel siguiente.Los errores son, por diseño, no alimentados al
stdinsiguiente proceso. A menudo no tendrán sentido para la próxima aplicación, y no deben ocultarse al usuario.Si desea mezclar los errores en stdout, puede usar
2>&1, por ejemplo , lo que dice esencialmente "agregar stderr a stdout". Por ejemploTambién debe incluir la salida de error de archivos inaccesibles.
solo le dará los errores.
fuente
Estoy confundido acerca de su pregunta, por lo que puedo decir, su comportamiento deseado es el predeterminado.
Cuando uso
para obtener una prueba simple,
hace exactamente lo que pides. Eso es lo que veo
en
lessycuando dejé
lessfuente
echo info ; echo error 1>&2) y repita la prueba: ambas líneas se canalizan a menos.Me encuentro con este problema recientemente en uno de mis Debian 5.0. por ejemplo, ls abc | menos me parece que el mensaje de error entra en menos, lo que en mi opinión.
Después de algunos intentos, descubrí que es solo algo relacionado con los buffers de pantalla. stderr NO entra en menos en realidad. Puede usar las teclas de flecha arriba o abajo (o j / k) para demostrar.
fuente