Écrire une commande dans un terminal, voir le résultat sur un autre

35

Je veux exécuter une commande foo sur un terminal et transmettre le résultat à un autre terminal. Est-il possible de faire cela ?

Mohammad Reza Rezwani
la source
4
Consultez également tmux et screen , qui vous permettent tous deux de prendre en charge, de mettre en miroir ou d’exécuter des commandes sur d’autres sessions.
Kevin

Réponses:

46

Oui, ça l'est. Une image vaut mille mots:

le terminal de radu

Donc, vous devez rediriger la sortie de votre commande en utilisant >operator to /dev/pts/#. Vous pouvez trouver en #utilisant whoou wcommande. Si vous voulez rediriger les erreurs, utilisez:

<command> >& /dev/pts/#
Radu Rădeanu
la source
Merci. mais si l'autre terminal n'existe pas. Que devrions-nous faire? Ou mieux dire de le passer à un plus récent?
Mohammad Reza Rezwani
5
Vous aurez probablement besoin d’un script pour le faire: le script prendra comme argument votre commande devrait ensuite ouvrir un nouveau gnome-terminalet détecter le tty (utilisant la ttycommande) du nouveau terminal et finalement lui envoyer le résultat.
Radu Rădeanu
8

Quelque chose comme ça pour votre $HOME/.bashrc:

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

Cela lancera une commande et affichera le résultat dans une nouvelle fenêtre de terminal.

Exemples:

ng ls -l
ng echo foo

Edit: Pour prendre en compte les alias $HOME/.bashrcutilisés, utilisez plutôt ceci:

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

alors la sortie de lsdevrait être colorée (merci à Radu Rădeanu pour cet indice ).

TuKsn
la source
Cela exécutera la commande directement dans le nouveau terminal.
Radu Rădeanu
Oui, mais quel est l'avantage de le lancer d'abord dans l'ancien terminal?
TuKsn
Aucun avantage ..., mais en fait cette réponse à ce commentaire .
Radu Rădeanu
4
Vous comprendrez si vous courrez type lset ensuite ng type ls:)
Radu Rădeanu
1
Si vous écrivez une fonction sur une ligne dans bashrc, vous aurez peut-être besoin d'un point-virgule pour la terminer ou vous rencontrerez une erreur "fin inattendue du fichier". donc ng() { gnome-terminal -x sh -c "$*; bash" ;}devrait être mieux. Et si vous utilisez xfce (xfce4-terminal en tant qu'émulateur par défaut): ng() { xfce4-terminal -x sh -c "$*; bash" ;}ou vous pouvez simplement exécuter n'importe quel émulateur par défautng() { x-terminal-emulator -x sh -c "$*; bash";}