É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 ?


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/#

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 ).


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";}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.