Comment exécuter xfce-terminal avec différentes commands par onglet et continuer à utiliser les tabs après que les commands sont returnnées?

Pour garder la vue d'set, j'aime placer plusieurs commands toujours dans le même ordre et les démarrer automatiquement set (gradle, git, database, scala-REPL, jboss …)

-H (hold) semble signifier que le terminal n'est pas fermé après la résiliation, mais comment puis-je résilier volontairement un tel process? Pas du tout? De manière à pouvoir continuer à utiliser le terminal.

J'utilise xubuntu avec xfce4-terminal et bash. Existe-t-il une meilleure solution graphique pour démarrer plusieurs commands, avec la possibilité de continuer à travailler dans cette window / cet onglet?

Mise à jour: Si vous ne connaissez pas ces commands: Jboss et gradle produisent continuellement des sorties que vous ne voulez pas avoir mélangées dans le même terminal. Et parfois, ils doivent être interrompus avec ^ C, et redémarré. Je n'aime pas rouvrir un terme xfce4 et naviguer dans le directory auquel j'ai besoin d'agir.

Database et scala-REPL sont interactifs, donc il n'y a pas de sens à les lancer en arrière-plan.

Mon script de démarrage actuel navigue juste vers les directorys désirés et ouvre tous les tabs dans le bon ordre pour les find toujours à la même position, en nommant chaque onglet pour son but:

xfce4-terminal -T eclipse --working-directory=/home/stefan/oximity -e "/opt/eclipse/eclipse" \ --tab -T arandr --working-directory=/home/stefan/oximity -e "arandr /home/stefan/.screenlayout/oximity.sh" \ --tab -T bash --working-directory=/home/stefan/oximity \ --tab -T gradle --working-directory=/home/stefan/oximity/med \ --tab -T git --working-directory=/home/stefan/oximity/med \ --tab -T mysql --working-directory=/opt/mini/mysql \ --tab -T jboss --working-directory=/opt/mini/jboss \ --tab -T jboss-log --working-directory=/opt/mini/jboss/standalone/log \ --tab -T scala-REPL --working-directory=/home/stefan/proj/mini/forum -e /opt/scala/bin/scala 

Eclipse et arandr sont détachés de la coquille et s'exécutent dans leur propre window, donc le paramètre -e (execute) fonctionne. Je pense que pour la scala-REPL cela fonctionne car c'est la dernière command de la list.

L'option -H/-hold de garder la window de l'émulateur de terminal ouverte une fois que les applications ont démarré (shell ou autre). Dans cet état, rien ne peut plus se passer.

Si vous voulez démarrer une command en tant que travail d'un shell interactif dans l'émulateur de terminal xfce4-terminal et garder le shell en cours d'exécution et l'utiliser de manière interactive après la sortie de l'application, avec bash , vous pouvez utiliser la variable d'environnement $PROMPT_COMMAND , pour que xfce-terminal démarre un shell interactif qui démarre la command donnée juste avant la première invite.

 xfce4-terminal \ -T eclipse \ --working-directory=/home/stefan/oximity \ -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; /opt/eclipse/eclipse" bash' \ \ --tab -T arandr \ --working-directory=/home/stefan/oximity \ -e 'env PROMPT_COMMAND="unset PROMPT_COMMAND; arandr /home/stefan/.screenlayout/oximity.sh" bash' \ \ --tab -T bash \ --working-directory=/home/stefan/oximity \ ... 

De cette façon, les commands sont des tâches de ce shell, ce qui signifie que vous pouvez les suspendre avec Ctrl-Z et les reprendre plus tard avec fg/bg comme si vous les aviez inputs à l'invite de ce shell interactif.

Cela suppose que vous ne définissez pas le $PROMPT_COMMAND dans votre ~/.bashrc . Notez également que le statut de sortie de la command ne sera pas disponible dans $? .

Pour le rendre encore plus comme la command a été input à l'invite du shell, vous pouvez même l'append à la list d'historique. Comme:

 xfce4-terminal -T /etc/motd -e 'env PROMPT_COMMAND=" unset PROMPT_COMMAND history -s vi\ /etc/motd vi /etc/motd" bash' 

De cette façon, une fois que vous quittez vi , vous pouvez appuyer sur la touche Haut pour callbacker la même command vi .

Un moyen plus facile de l'écrire:

 PROMPT_COMMAND='unset PROMPT_COMMAND; history -s "$CMD"; eval "$CMD"' \ xfce4-terminal \ -T /etc/motd -e 'env CMD="vi /etc/motd" bash' \ --tab -T top -e 'env CMD=top bash' 

Le:

 xfce4-terminal -e 'sh -c "cmd; exec bash"' 

la solution donnée dans d'autres réponses fonctionne mais présente certains inconvénients:

  1. Si vous appuyez sur Ctrl-C pendant l'exécution de cmd , cela tue le sh externe car il n'y a qu'un seul groupe de process pour sh et cmd .
  2. Vous ne pouvez pas utiliser Ctrl-Z pour suspendre cmd
  3. Comme dans l'approche $PROMPT_COMMAND , le statut de sortie de la command ne sera pas disponible dans $? .

Vous pouvez travailler autour de 1 ci-dessus en faisant:

 xfce4-terminal -e 'sh -c "trap : INT; cmd; exec bash"' 

Ou:

 xfce4-terminal -e 'sh -ic "cmd; exec bash"' 

Avec ce dernier, vous serez également en mesure de suspendre le process avec Ctrl-Z , mais vous ne pourrez pas utiliser fg/bg dessus. Vous pourrez continuer en arrière-plan en faisant un kill -s CONT sur le pid de cmd .

Pour autant que je comprenne votre question, vous voulez exécuter des process dans un terminal, pouvoir les faire Ctrl + C et, ensuite, garder la window ouverte, avec le shell.

Si j'ai raison, cela pourrait être accompli avec une command comme celle-ci:

 xfce4-terminal -e "bash -c 'COMMAND; exec bash'" 

plusieurs applications dans les tabs xfce4-terminal

Ajout d'un shell interactif à chaque onglet xfce

Vous pouvez utiliser ce hack pour append un shell si / quand vous Ctrl + C un onglet:

 $ xfce4-terminal -H \ --tab -T bash -e "bash -c 'top;bash'" \ --tab -T git -e "bash -c 'top;bash'" 

Cela vous donnera les éléments suivants:

ss de xfce w / tabs

ss de xfce w / top Ctrl + C

En quittant le shell sans -H le terminal sera également fermé. Avec ce drapeau, le terminal continuera à fonctionner, mais le process shell est fermé et ne peut pas être réactivé.

Je pense que vous essayez d'archiver que vous venez de démarrer votre terminal et que votre environnement de développement démarre?

Vous pouvez créer un script shell et y placer toutes vos commands. A la fin du script, vous venez de lancer votre shell:

 #!/bin/sh gradle & git & ... & .... & jboss & $SHELL # some cleanup commands if needed 

Appelez ensuite ce script via xfce4-terminal -e /the/script . Lorsque vous quittez $SHELL le process parent (votre script) est terminé et les tâches d'arrière-plan recevront le signal de sortie et quitteront également.

Si vous voulez les garder en vie, utilisez par exemple nohup jboss & dans votre script