Escribir comando en una terminal, ver resultado en otra

35

Quiero ejecutar un comando foo en una terminal y pasar el resultado a otra terminal. Es posible hacer esto ?

Mohammad Reza Rezwani
fuente
44
Observe también tmux y screen , los cuales le permiten hacerse cargo, duplicar o simplemente ejecutar comandos en otras sesiones.
Kevin

Respuestas:

46

Sí lo es. Una imagen que vale más que mil palabras:

terminal de radu

Entonces, debe redirigir la salida de su comando utilizando el >operador a /dev/pts/#. Puedes encontrar #usando whoo wcomando. Si quiere redirigir y los errores, use:

<command> >& /dev/pts/#
Radu Rădeanu
fuente
Gracias. pero si la otra terminal no existe. ¿Qué deberíamos hacer? ¿O mejor decir pasarlo a uno más nuevo?
Mohammad Reza Rezwani
55
Probablemente necesitará un script para hacer eso: el script tomará como argumento su comando, luego deberá abrir uno nuevo gnome-terminaly detectar el tty (usando el ttycomando) del nuevo terminal y finalmente enviarle la salida.
Radu Rădeanu
8

Algo así para tu $HOME/.bashrc:

ng() { gnome-terminal -x sh -c "$*; bash"; }

Esto ejecutará un comando y muestra el resultado en una nueva ventana de terminal.

Ejemplos:

ng ls -l
ng echo foo

Editar: para considerar los alias del $HOME/.bashrcuso de este en su lugar:

ng() { gnome-terminal -x bash -ic "$*; bash"; }

entonces la salida de lsdebe ser coloreada (gracias a Radu Rădeanu por esta pista ).

TuKsn
fuente
Esto ejecutará el comando directamente en la nueva terminal.
Radu Rădeanu
Sí, pero ¿cuál es la ventaja de ejecutarlo primero en la antigua terminal?
TuKsn
Ninguna ventaja ..., pero de hecho esta respuesta a este comentario .
Radu Rădeanu
44
Entenderás si vas a correr type lsy luego ng type ls:)
Radu Rădeanu
1
si escribe una función en una línea en bashrc, tal vez necesite un punto y coma para finalizarla, o se encontrará con un error de "final inesperado del archivo". Entonces ng() { gnome-terminal -x sh -c "$*; bash" ;}debería ser mejor. Y si está utilizando xfce (xfce4-terminal como emulador predeterminado): ng() { xfce4-terminal -x sh -c "$*; bash" ;}o simplemente puede ejecutarlo con cualquier emulador predeterminadong() { x-terminal-emulator -x sh -c "$*; bash";}