tee
puede redirigir la entrada estándar canalizada a la salida y al archivo estándar .
echo Hello, World! | tee greeting.txt
El comando anterior mostraría el saludo en la pantalla del terminal y lo guardaría en el contenido del greeting.txt
archivo, creando el archivo si no hay ninguno con ese nombre.
También hay un -a
interruptor para tee
agregar al archivo existente en lugar de sobrescribir.
¿Hay alguna manera conveniente de redirigir la entrada canalizada al comando y la salida estándar en lugar del archivo?
Estoy tratando de crear una secuencia de comandos de contenedor para buku
copiar en la selección principal la URL del marcador especificado por su número de índice.
# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION
Aquí lo uso echo
dos veces, primero para mostrar en el terminal y luego guardar en la selección principal (portapapeles).
Me imagino algo echo $url | teeC xsel
o un atajo para mostrar la salida antes de pasar al siguiente comando (encadenar comandos), lo que me permitiría encadenar todo el comando en una línea sin la necesidad de guardar el resultado en una variable de la siguiente manera:
buku -f 1 -p $1 | cut -f 2 | teeC xsel
También puedo usarlo urlview
para ver, seleccionar y abrir con lo $BROWSER
siguiente:
bukuc 10-20 | urlview
tee /dev/tty
otty0
(no recuerdo exactamente ... estoy en el camino)info tee
menciona la sustitución del proceso y la salida del tee de tubería a un programa ...Respuestas:
Es sencillo en los shells que admiten la sustitución del proceso , por ejemplo bash
De lo contrario, podría usar un FIFO (aunque carece de comodidad)
fuente
sh
(Bourne shell) no admite esa característica; 2. La flecha debe pegarse como parte del operador único>()
para la sustitución del proceso.El análogo directo de "tee para comandos" es el
pee
comando de moreutils (tee
pero con tuberías). Sus argumentos se usan como comandos para ejecutar, no como rutas, y obtienen la entrada canalizada a ellos en lugar de escribirlos en el archivo. Todos los comandos reciben la entrada estándar a la que se canalizópee
como propia.El uso
pee
, se puede obtener el resultado que quería diciéndole que se ejecute tantoxsel
ycat
con la entrada.Hay un
cat
proceso adicional flotando por allí para hacer la salida, lo cual no es realmente un problema para su caso de uso, pero podría ser menos ideal en otras ocasiones. Esto funciona con cualquier shell, a diferencia de la sustitución de procesos, pero por supuesto requiere una herramienta adicional (probablemente menos común) instalada.Puede dar órdenes más complejas con una cita de ellos:
pee "xsel --display :1" cat
. Se ejecutan con ellossh
, por lo que debe tener cuidado con los metacaracteres de shell.fuente