Hay algunos comandos que filtran o actúan sobre la entrada, y luego la pasan como salida, creo que generalmente a stdout – pero algunos comandos solo tomarán el stdin y hacer lo que sea que hagan con él, y no generar nada.
Estoy más familiarizado con OS X, por lo que hay dos que me vienen a la mente de inmediato:pbcopy y pbpaste – que son medios para acceder al portapapeles del sistema.
De todos modos, sé que si quiero tomar stdout y escupir la salida para ir a ambos stdout y un archivo entonces puedo usar el tee dominio. Y sé un poco sobre xargs , pero no creo que sea eso lo que estoy buscando.
Quiero saber cómo puedo dividir stdout para ir entre dos (o más) comandos. Por ejemplo:
cat file.txt | stdout-split -c1 pbcopy -c2 grep -i errors
Probablemente haya un mejor ejemplo que ese, pero realmente estoy interesado en saber cómo puedo enviar stdout a un comando que no lo transmite y manteniendo stdout de ser "silenciado":no estoy preguntando cómo cat un archivo y grep parte de él y cópielo en el portapapeles; los comandos específicos no son tan importantes.
Además, no estoy preguntando cómo enviar esto a un archivo y stdout – esta puede ser una pregunta "duplicada" (lo siento), pero busqué un poco y solo pude encontrar preguntas similares que preguntaban sobre cómo dividir entre stdout y un archivo, y las respuestas a esas preguntas parecían ser tee , que no creo que funcione para mí.
Finalmente, puede preguntar "¿por qué no hacer que pbcopy sea lo último en la cadena de tuberías?" y mi respuesta es 1) ¿qué pasa si quiero usarlo y aún veo el resultado en la consola? 2) ¿Qué pasa si quiero usar dos comandos que no generan stdout? después de que procesan la entrada?
Ah, y una cosa más:me doy cuenta de que podría usar tee y una canalización con nombre (mkfifo ) pero esperaba encontrar una manera de hacerlo en línea, de manera concisa, sin una configuración previa 🙂
Respuesta aceptada:
Puedes usar tee y proceso de sustitución para esto:
cat file.txt | tee >(pbcopy) | grep errors
Esto enviará toda la salida de cat file.txt a pbcopy , y solo obtendrás el resultado de grep en tu consola.
Puede poner múltiples procesos en el tee parte:
cat file.txt | tee >(pbcopy) >(do_stuff) >(do_more_stuff) | grep errors