Bash - executer deux commandes assignées à une variable
Résolu/Fermé- Bash - executer deux commandes assignées à une variable
- Invite de commandes - Guide
- Deux ecran pc - Guide
- Diviser une cellule excel en deux horizontalement ✓ - Forum Excel
- Itinéraire google map entre deux adresses - Guide
5 réponses
Modifié le 17 oct. 2022 à 16:17
Bonjour,
Car il faut utiliser eval, car sinon tout se passe comme si les espaces étaient échappés. et si la commande s'appelait "id ; date" au lieu d'interpréter "id", puis "date".
read -ep "command: " cmd ; eval "$cmd"
command: id; date
uid=1000(mando) gid=1000(mando) groupes=1000(mando),24(cdrom),25(floppy),27(sudo),29(audio),30(dip),44(video),46(plugdev),101(input),108(netdev),110(lpadmin),113(scanner),119(bluetooth),136
(wireshark)
lun. 17 oct. 2022 16:15:40 CEST
Bonne chance
17 oct. 2022 à 17:04
hello
ou
$ read -ep "command: " cmd ; bash -c "$cmd" command: uname;date Linux Mon Oct 17 17:01:56 CEST 2022
18 oct. 2022 à 17:32
Bonjour,
Est-ce que tu crois qu'il est possible dans ces conditions, d'exécuter la deuxième commande uniquement si la première est valide ?
Je connais $?, mais je ne pense pas qu'on puisse l'exploiter dans ce contexte précis.
Une autre manière de reformuler ce que dubcek a déjà indiqué dans #5 :
Oui c'est possible, c'est la nuance entre :
cmd1 && cmd2 #cmd2 ne s'exécute que si cmd1 a fonctionné
... et :
cmd1 ; cmd2 #cmd2 ne s'exécute même si cmd1 n'a pas fonctionné
Comme dubcek l'indique, c'est en rapport direct avec la variable $?, (qui stocke le code d'exécution de la commande invoquée). En effet, c'est grâce au code d'exécution que l'opérateur && détermine s'il va exécuter ou non la seconde commande (s'il est nul, alors la commande s'est bien exécutée, sinon, c'est qu'il y a eu une erreur).
Au niveau de ton script, tu peux contrôler avec un if ce que contient $?. Cela permet de rattraper différemment une erreur en fonction de l'entier ainsi récupéré (et les codes d'exécutions des différentes commandes sont documentées dans leur page de man). Après, dans ton cas particulier, l'opérateur && est probablement suffisant.
Bonne chance
Modifié le 18 oct. 2022 à 17:23
date n'est exécuté que si ls retourne $?==0
$ ls yxc ls: cannot access 'yxc': No such file or directory $ $ read -ep "command: " cmd ; bash -c "$cmd" command: ls yxc && date ls: cannot access 'yxc': No such file or directory $ $ touch yxc $ read -ep "command: " cmd ; bash -c "$cmd" command: ls yxc && date yxc Tue Oct 18 10:32:53 CEST 2022
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
17 oct. 2022 à 20:24
super, merci beaucoup !