J'ai un script bash qui démarre une fenêtre de terminal avec plusieurs onglets et exécute une commande dans chacun des onglets semblable à celui-ci (et les titres ne sont pas pris en charge, je sais):
#!/bin/bash
title1="foo"
title2="bar"
cmd1="sleep 1s"
cmd2="cd ~/Desktop"
gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $Shell'" \
--tab --title="$title2" --command="bash -c '$cmd2; $Shell'"
Dans le script réel, lorsque le processus de l'un des onglets meurt, je dois le redémarrer, généralement. Cependant, le fait d'appuyer sur la touche HAUT ne génère pas la commande utilisée dans le script de cet onglet. Ce comportement est le même avec ce script, comme si j'appuyais dans le premier onglet, je n'ai pas "sommeil 1" mais une commande complètement différente que j'ai utilisée ailleurs.
Existe-t-il un moyen pour que l'onglet ouvert conserve le $ cmd utilisé dans le script?
Il devrait y avoir une solution plus élégante que celle-ci, mais vous pouvez essayer quelque chose comme:
--command="bash -c 'export HISTFILE=/tmp/hist\$\$; history -s \"$cmd1\";
history -w; $cmd1; exec $Shell'"
où le bash reçoit son propre fichier d’historique hist$$
, le $$
devant être échappé pour être évalué ultérieurement au pid du processus. history -s
enregistre une chaîne dans la liste d'historique et -w
enregistre cette chaîne dans le fichier HISTFILE
. Le shell est supposé utiliser cette valeur définie dans l'environnement. Vous devrez peut-être ajouter --norc
pour que bash l'empêche de configurer un fichier d'historique différent de votre ~/.bashrc
, par exemple.