Ce que j'avais l'habitude de faire, c'est:
Ouvrez manuellement une instance de terminal pour exécuter les commandes et les fichiers Shell suivants
Courir
PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
courir:
cd /home/userA/scripts
courir:
varset.sh
qui exporte et définit certaines variables.
courir:
source ff.sh $input $output
courir:
bb.sh
qui me demande de saisir un numéro lors de son exécution.
courir
bc.sh 8
J'ai donc dû les copier et coller manuellement dans le terminal avant chaque exécution.
Ce que je veux faire maintenant, c'est mettre tout cela dans un fichier script qui ouvrira automatiquement le terminal et les exécutera en séquence afin que la commande suivante ne s'exécute que lorsque la première est terminée, de sorte que je n'ai pas à le faire manuellement plus.
Après avoir appliqué la suggestion de muru trouvée ici J'ai utilisé le script ci-dessous uniquement pour les étapes 1 à 4 mais cela ne fonctionne pas correctement:
gnome-terminal -x Sudo -u userA bash -c 'PPACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH; cd /home/userA/scripts; source varset.sh; bash'`
Il n'est pas exécuté dans la même séquence que je le dis.
Cela ouvre avec succès le terminal mais la première ligne apparaît dans le terminal est un message qui se trouve dans varset.sh
(bien que ce devrait être la troisième commande à exécuter) et l'autre chose est qu'aucune des variables qui devraient être définies à l'aide de ce varset.sh
est défini, par exemple lorsque j'utilise echo $ var1 (qui se trouve dans variables.sh) n'affiche rien ce qui signifie que les variables ne sont pas définies la seule chose qui fonctionne dans variables.sh est le message d'écho affiché.
La deuxième ligne qui apparaît dans le répertoire est le répertoire de travail du terminal qui est défini sur /home/userA/scripts
.
La troisième chose est que cette commande PACKAGE_PATH=PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
qui définit la variable $ PACKAGE_PATH ne fonctionne pas.
Donc, si quelqu'un pouvait vous conseiller sur la façon d'exécuter ces commandes et les fichiers Shell dans la séquence demandée.
Écrivez simplement un script:
#!/usr/bin/env bash
PACKAGE_PATH=/home/userA/package1:/home/userA/package2:$PACKAGE_PATH
cd /home/userA/scripts
## You need to source this script if it defines variables. Otherwise
## the variables won't be available to your main script. '.' is the same
## as 'source' but more portable to different shells.
. varset.sh &&
. ff.sh $input $output &&
bb.sh &&
bc.sh 8 &&
Le &&
afater chaque commande garantit que la suivante ne sera exécutée que si la première se termine avec succès.
Vous pouvez maintenant enregistrer le script sous ~/scripts/foo.sh
, rendez-le exécutable (chmod 744 ~/scripts/foo.sh
) et l'exécuter à partir d'un terminal:
~/scripts/foo.sh
Vous pouvez également créer un .desktop
fichier pour cela et exécutez-le en double-cliquant comme expliqué ici . Changez simplement le Terminal=false
ligne vers Terminal=true
.