Je dois ouvrir plusieurs onglets de terminal, leur donner des titres, accéder à un répertoire et faire en sorte que chaque onglet exécute une commande.
Je suis nouveau dans les scripts Linux et Shell, après avoir cherché en ligne et vérifié certaines solutions, j’ai créé ce script (ÉDITÉ en fonction des réponses ci-dessous):
#!/bin/bash
cd /media/Extra/Project
tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)
cmds[1]="'Rails s'"
titles[1]="Server"
cmds[2]="'Rails c'"
titles[2]="Console"
for i in 1 2; do
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
done
gnome-terminal "${options[@]}"
exit 0
Il ouvre les onglets, les nomme, mais n'exécute pas les commandes générant cette erreur:
Une erreur s'est produite lors de la création du processus enfant pour ce terminal.
Un autre inconvénient est que si j'arrête la commande en cours d'exécution, elle ferme l'onglet, ce que je ne veux pas. Je dois pouvoir arrêter la commande et l'exécuter à nouveau dans le même onglet.
Quel est le problème avec le script? Y a-t-il un autre moyen plus simple de faire cela?
Remarque: Si je supprime la partie (-e "\" bash -c $ {cmds [i]}; bash\"") de la commande, les onglets du répertoire donné sont ouverts et nommés, sans erreur.
Après avoir appliqué la réponse @Tuknutx ci-dessous et modifié le script, l'erreur n'apparaît plus, mais elle me donne bash: Rails c: command not found
et Rails s
crée une nouvelle application Rails au lieu de démarrer le Rails serveur, j'utilise .rmvrc pour sélectionner un gemset après avoir accédé à ce dossier.
Je recommanderais d'utiliser tmux
avec tmuxinator
, cela fera le travail à votre place, et vous pouvez également compter sur terminator
!
Pour terminator
layout checkout la réponse de mhnagaoka ici askubuntu aussi:
Après avoir configuré votre mise en page, cliquez avec le bouton droit sur l’arrière-plan du terminal, puis choisissez Préférences → Layouts et cliquez sur le bouton Ajouter .
Donnez-lui un nom et cliquez sur Close .
Cela devrait créer le fichier
~/.config/terminator/config
mentionné.Vous pouvez maintenant démarrer Terminator en utilisant la disposition enregistrée en utilisant:
terminator -l yourLayout
(remplacez yourLayout par ce que vous avez choisi à l'étape 2).(facultatif) Editez le fichier
~/.config/terminator/config
de manière à ce qu'il soit remplacé par[layouts]
et imbriqué[[yourLayout]]
, renommez-le. yourLayout à par défaut et supprimez/renommez la présentation précédente par défaut . Désormais, lorsque Terminator démarrera sans aucun paramètre, il chargera votre présentation personnalisée[[default]]
!
Pour résumer quelques autres réponses et leurs commentaires, voici ce que j'ai fini par:
#!/bin/bash
cd /path/of/my/stuff
tab=" --tab"
options=()
cmds[1]="echo Banana"
cmds[2]="echo Cat"
for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done
gnome-terminal "${options[@]}"
exit 0
Notez que j'ai enlevé l'onglet 'master', ainsi que les profils et les titres (qui semblent être obsolètes dans gnome-terminal
).
L'argument que vous donnez à l'option -e est "bash -c command; bash"
, y compris les guillemets. Il interprète cette chaîne entière comme le nom d'une commande! Essayez plutôt ceci: -e "bash -c 'command ; bash'"
. Ainsi, ce qui est exécuté sur la fenêtre de votre terminal est command
, et ensuite, vous obtenez une fille Shell, ce qui, je suppose, est ce que vous voulez. Incidemment, vous pouvez aussi dire 'command & bash'
; Cela exécutera la commande en arrière-plan et vous donnera immédiatement la fille Shell.
Essaye ça:
options+=($tab --title="${titles[i]}" -e "bash -c \"${cmds[i]} ; bash\"" )
sinon, toute l'expression après -e sera interprétée comme la commande.
Pour inclure les alias de .bashrc, utilisez -ic
au lieu de c