Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 05/05/2013, à 16:18

bvsud

Pourquoi mon bash ne s'exécute-t-il pas ?

Bonjour à tous smile

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 :

1465b73f568f69644ace8027ffd4dab8cd388c07.png

et voici le répertoire sous MC : 

3d21fc519c4b53faf3dcdc07e5e4a1f83b1af726.png

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 smile

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 smile


~ 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 smile
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 ?

xavier4811 a écrit :
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