Pour conserver la vue d'ensemble, j'aime bien placer plusieurs commandes toujours dans le même ordre et les démarrer automatiquement ensemble (gradle, git, base de données, scala-reply, jboss ...)
-H (Hold) semble signifier que le terminal n'est pas fermé après la résiliation, mais comment résilier délibérément un tel processus? Pas du tout? De manière à ce que je puisse continuer à utiliser le terminal.
J'utilise Xubuntu avec xfce4-terminal et bash. Existe-t-il une meilleure solution d'interface graphique pour démarrer plusieurs commandes, avec la possibilité de continuer à travailler dans cette fenêtre/onglet?
Mise à jour : Si vous ne connaissez pas ces commandes: JBoss et la gradle produisent continuellement une sortie, que vous ne voulez pas avoir mélangé 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 accéder à l'annuaire que j'ai besoin d'agir.
La base de données et scala-replient sont interactives, il n'est donc pas logique de les démarrer en arrière-plan.
Mon script de démarrage actuel navigue vers les répertoires souhaités et ouvre tous les onglets dans le bon ordre de les trouver toujours à la même position, nommant chaque onglet à cet effet:
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 à partir de la coquille et fonctionnent dans leur propre fenêtre, donc les œuvres de paramètre -e (exécuter). Je pense que pour le Scala-Rem Reply Ça fonctionne depuis sa dernière commande de la liste.
Les -H/-hold
L'option consiste à conserver la fenêtre de l'émulateur de terminal ouverte une fois que les applications ont été démarrées (coquille ou autre) exagérée. Dans cet état, rien de plus ne peut arriver.
Si vous souhaitez démarrer une commande en tant que tâche d'une coque interactive dans l'émulateur de terminal XFCE4-terminal et conserver la course à la coque et utilisez-la de manière interactive une fois que l'application est sortie, avec bash
, vous pouvez utiliser le $Prompt_COMMAND
variable d'environnement, d'avoir xfce-terminal
Démarrer une coque interactive qui démarre la commande 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 commandes sont emplois de cette coquille qui signifie que vous pouvez les suspendre avec Ctrl-Z et reprenez-les plus tard avec fg/bg
Comme si vous les étiez entré à l'invite de cette coquille interactive.
Cela suppose cependant que vous ne définissez pas le $Prompt_COMMAND
dans ton ~/.bashrc
. Notez également que l'état de sortie de la commande ne sera pas disponible dans $?
.
Pour que cela soit encore plus comme la commande a été saisie à l'invite de Shell, vous pouvez même l'ajouter à la liste 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 avez quitté vi
, vous pouvez appuyer sur la Up clé pour rappeler que la même commande vi
.
Un moyen plus facile de l'écrire:
Prompt_COMMAND='unset Prompt_COMMAND; history -s "$CMD"; eval "$CMD"' \
xfce4-terminal --disable-server \
-T /etc/motd -e 'env CMD="vi /etc/motd" bash' \
--tab -T top -e 'env CMD=top bash'
Les:
xfce4-terminal -e 'sh -c "cmd; exec bash"'
solution Comme indiqué dans d'autres réponses fonctionne, mais a quelques inconvénients:
cmd
est en cours d'exécution, qui tue l'extérieur sh
, car il n'y a qu'un seul groupe de processus pour les deux sh
et cmd
.cmd
$Prompt_COMMAND
Approche, l'état de sortie de la commande ne sera pas disponible dans $?
.Vous pouvez contourner 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 capable de suspendre le processus avec Ctrl-Z, mais vous ne pourrez pas utiliser fg/bg
dessus. Vous serez capable de le poursuivre en arrière-plan en faisant un kill -s CONT
sur le PID de cmd
.
xfce4-terminal
ongletsVous pouvez utiliser ce piratage pour ajouter une coquille 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 ce qui suit:
Lors de la sortie de la coquille sans -H
Le terminal sera fermé aussi. Avec ce drapeau, le terminal continuera à fonctionner, mais le processus de coque est fermé et ne peut pas être ravivé.
Je pense que vous essayez d'archier que vous commenciez simplement votre terminal et que votre environnement de développement commence?
Vous pouvez créer un script shell et mettre toutes vos commandes à l'intérieur. À la fin du script, vous venez de commencer votre shell:
#!/bin/sh
gradle &
git &
... &
.... &
jboss &
$Shell
# some cleanup commands if needed
Appelez ensuite ce script via xfce4-terminal -e /the/script
. Quand cesser de fumer de $Shell
Le processus 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 E.G. Nohup jboss &
dans votre script