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