web-dev-qa-db-fra.com

Comment ouvrir un nouveau terminal, exécuter un processus dans ce terminal et le diriger vers le processus?

Ce que j'aimerais faire, en gros, c'est une version new-window de less. Il y a bien longtemps, un outil appelé gless faisait exactement cela. Par exemple

cat my_very_long_file | gless

ouvrirait une nouvelle fenêtre et lancerait un pager de type less- montrant mon très long fichier; le terminal à partir duquel je lance la commande reste propre.

gless n'est pas disponible dans les systèmes plus récents. L'alternative la plus proche que j'ai trouvée est gview - (pratiquement gvim en mode lecture seule, lecture de l'entrée standard), mais ce n'est pas la chose exacte; il se lit dans le stdin entier avant d'afficher quoi que ce soit, donc ce n'est pas bon pour les grandes entrées.

Je pensais lancer un nouveau terminal (xterm, konsole ou quoi que ce soit) avec less comme commande initiale. Mais ça ne marche pas comme je veux; Je voudrais faire quelque chose comme

cat my_very_long_file | xterm -e less

Mais xterm et tous les autres terminaux ne semblent pas transmettre leur entrée standard au processus qu’ils exécutent - la nouvelle fenêtre s’ouvre, mais disparaît immédiatement.

(Je sais que je peux démarrer la commande dans le nouveau terminal; mais ce n'est pas ce que je veux. Je veux vraiment exécuter une commande dans le shell actuel et rediriger vers un nouveau processus. cat n'est qu'un exemple.)

En tant que test de toute méthode suggérée, veuillez considérer ceci comme un cas de test:

od -a /dev/random | <whatever-solution>

Avec la solution substituée, cela devrait créer une nouvelle fenêtre avec un pager (ou tout autre programme) qui reçoit un flux de texte aléatoire sans fin.

(Ajout tardif) Je recherche une solution simple qui permette de garder l’esprit de la tuyauterie. Les solutions multi-étapes peuvent fonctionner mais ne sont pas naturelles. Il existe une seule ligne de commande qui fonctionne également: xterm -e 'whatever | less', je l’utilise parfois mais c’est contre nature pour moi.

2
laugh

Que diriez-vous d'un tuyau nommé?

mkfifo /tmp/test.fifo
od -a /dev/urandom > /tmp/test.fifo

Et dans la nouvelle fenêtre:

cat /tmp/test.fifo | less

Ou:

gnome-terminal -e "bash -c 'cat /tmp/test.fifo | less'"
2
Philipp Ludwig

Essayez d’ajouter cette fonction à votre ~/.bashrc:

gless() { gnome-terminal -e "less $*" & }

Cela démarre le terminal en arrière-plan, libérant votre console. De plus, il passe tous les arguments à la commande less (par exemple, gless -S test.txt)

0
Simon Sudler