#1 Le 05/05/2013, à 16:18
- bvsud
Pourquoi mon bash ne s'exécute-t-il pas ?
Bonjour à tous
Voici le texte :
#! /bin/sh
clear
echo $PATH
echo CECI EST MON PREMIER FICHIER BASH
echo
echo
Le fichier s'appelle Bash_vide.sh (maj / min respectées) .
Les erreurs retournées :
et voici le répertoire sous MC :
Pourquoi ?
Dernière modification par bvsud (Le 05/05/2013, à 16:19)
Hors ligne
#2 Le 05/05/2013, à 16:21
- bvsud
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
Précision : il s'exécute très bien si je l'appelle depuis MC...
Hors ligne
#3 Le 05/05/2013, à 16:21
- shoot76
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
chmod +x Bash_vide.sh && ./Bash_vide.sh
ou bien :
bash Bash_vide.sh
La première commande le rend executable, et ./ permet de le lancer.
La deuxième appelle Bash, et précise le type de fichier.
Cordialement
Dernière modification par shoot76 (Le 05/05/2013, à 16:22)
~ Data-sientist freelance : https://skulder.fr
Hors ligne
#4 Le 05/05/2013, à 17:45
- bvsud
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
Merci
Juste un détail. J'avais bien effectué la commande chmod rendant le bash exécutable. Pourquoi cette terminaison : && ./Bash_vide.sh ? On dirait le ET logique du C... C'est pour laisser intacts les autres bits de l'attribut de fichier ?
Hors ligne
#5 Le 05/05/2013, à 18:41
- shoot76
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
Non absolument pas,
C'est une condition d'execution à la chaine.
com1 & com2 & com3
execute chacune des commandes l'une après l'autre, avec ou sans succès (Erreur par exemple)
com1 && com2 && com3
Réalise la même chose, mais avec une condition de succès, si tu as une erreur sur com2, com3 ne sera pas executée, mais com1 l'aura été.
Je sais pas si j'ai été très clair, mais si tu as des questions, n'hésites pas
~ Data-sientist freelance : https://skulder.fr
Hors ligne
#6 Le 05/05/2013, à 18:48
- Spitfire 95
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
Tu es sûr ? C'est pas plutôt que A & B exécute A et B simultanément alors que A && B exécute A puis attend que A se termine pour exécuter B ?
Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.
Hors ligne
#7 Le 05/05/2013, à 19:51
- shoot76
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
Ah si peut être ... va falloir que je ressorte les classeurs pour vérifier, tu as peut être raison
Je vérifie et vous tient au courant
~ Data-sientist freelance : https://skulder.fr
Hors ligne
#8 Le 05/05/2013, à 20:00
- Spitfire 95
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
while [ 1 ]; do echo 1; done && touch fichier
Le fichier fichier n'est pas créé, on reste dans la boucle infinie
while [ 1 ]; do echo 1; done & touch fichier
Le fichier fichier est créé mais on reste quand même dans la boucle infinie.
(pour en sortir par contre Ctrl+C n'agissait pas sur la boucle j'ai dû faire un Ctrl+D)
Logiquement ça doit bien être une question d'exécution synchrone ou asynchrone (après c'est peut-être pas que ça).
Le plus simple pour vérifier est de faire sudo apt-get update && sudo apt-get dist-upgrade et de retirer un &, on voit que apt refuse car un autre est lancé quand il y en a un mais sous Fedora j'ai pas pu le faire et j'ai voulu éviter de remplacer avec yum pour faciliter les tests sous Ubuntu).
Par l'expérimentation je pense avoir raison, mais bon après bash c'est pas mon truc.
Dernière modification par Spitfire 95 (Le 05/05/2013, à 20:01)
Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.
Hors ligne
#9 Le 05/05/2013, à 20:19
- xavier4811
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
B'soir,
Si mes souvenirs sont bons :
commande_a & commande_b
exécute commande_a en arrière plan et exécute commande_b au premier plan alors que
commande_a && commande_b
exécute commande_a puis si (et seulement si) commande_a réussi alors exécute commande_b sinon exit
Hors ligne
#10 Le 05/05/2013, à 20:32
- Spitfire 95
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
commande_a & commande_b
exécute commande_a en arrière plan et exécute commande_b au premier plan
commande_a &
exécute commande_a en arrière plan. En revanche
commande_a & commande_b
la sortie standard de commande_a se fait bien dans la console donc si on est d'accord sur le terme arrière plan ça doit pas être ça.
Dernière modification par Spitfire 95 (Le 05/05/2013, à 20:33)
Trisquel GNU/Linux 6.0 / Fedora 19 & rawhide.
joueur ryzom et wesnoth
Développeur livewallpaper
Membre déserteur et traître de la brigade des S.
Hors ligne
#11 Le 05/05/2013, à 20:49
- xavier4811
Re : Pourquoi mon bash ne s'exécute-t-il pas ?
Parce que le & est a la fin de ta boucle while, derrière le done. le job est mis en arrière plan une fois qu'il se termine.
$ less /etc/yum.conf & less /etc/yum.repos.d/epel.repo
résultat:
[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 6 - $basearch - Debug
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 6 - $basearch - Source
#baseurl=http://download.fedoraproject.org/pub/epel/6/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-6&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
gpgcheck=1
/etc/yum.repos.d/epel.repo (END)
quand je quitte less :
$ less /etc/yum.conf & less /etc/yum.repos.d/epel.repo
[1] 3268
[1]+ Stopped less /etc/yum.conf
$
et je récupère le job en arrière plan :
$ fg 1
résultat
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=3
# This is the default, if you make this bigger yum won't see if the metadata
# is newer on the remote and so you'll "gain" the bandwidth of not having to
# download the new metadata and "pay" for it by yum not having correct
# information.
# It is esp. important, to have correct metadata, for distributions like
# Fedora which don't keep old packages around. If you don't like this checking
# interupting your command line usage, it's much better to have something
# manually check the metadata once an hour (yum-updatesd will do this).
# metadata_expire=90m
# PUT YOUR REPOS HERE OR IN separate files named file.repo
# in /etc/yum.repos.d
/etc/yum.conf (END)
puis je termine :
$ fg 1
less /etc/yum.conf
$
Dernière modification par xavier4811 (Le 05/05/2013, à 20:52)
Hors ligne