lancer une commande depuis mon script bash

Ma commande est introuvable sur mon système

Le problème exposé dans ce sujet a été résolu.

Bonjour j'essaye actuellement de réaliser un script bash. Dans lequel j'essaye de lancer une commande censée me donner les informations sur l'OS sur lequel je suis. Je fais donc ceci :

1
2
3
4
#!/bin/bash
### Verification du systeme cible ###
 dist=`lsb_release -i`
 echo "Disctribution : $dist"

Mais j'obtiens une erreur lsb_release Command not found.

Je me suis dit que c'est peut-être mon lsb qui est foireux, sauf que même en remplaçant par un simple ls -l j'ai la même erreur.

Quelqu'un a une idée ? En sachant que je l'ai lancé depuis un système Redhat sur une machine Vagrant. Pas encore testé sur un autre OS.

Mon script complet ci-dessous.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
 
#Set Script Name variable
SCRIPT=`basename ${BASH_SOURCE[0]}`
 
#Initialize variables to default values.
OPT_URL_REPO="https://github.com/zestedesavoir/zds-site.git"
OPT_BRANCH="dev"
 
#Set fonts for Help.
NORM=`tput sgr0`
BOLD=`tput bold`
REV=`tput smso`
 
#Help function
function HELP {
echo -e \\n"Documentation du script ${BOLD}${SCRIPT}.${NORM}"\\n
echo -e "${REV}Utilisation basique:${NORM} ${BOLD}$SCRIPT /opt/${NORM}"\\n
echo "Les options sont optionels. Les seules options reconnues sont les suivantes :"
echo "${REV}-u${NORM} --Modifie la valeur de l'option ${BOLD}url${NORM}. La valeur par defaut est: ${BOLD}https://github.com/zestedesavoir/zds-site.git${NORM}."
echo "${REV}-b${NORM} --Modifie la valeur de l'option ${BOLD}branch${NORM}. La valeur par defaut est: ${BOLD}dev${NORM}."
echo -e "${REV}-h${NORM} --Affiche le message d'aide. Aucune autre fonction n'est executee."\\n
echo -e "Exemple: ${BOLD}$SCRIPT -u https://github.com/zestedesavoir/zds-site.git -b dev /opt/${NORM}"\\n
exit 1
}
 
#Check the number of arguments. If none are passed, print help and exit.
NUMARGS=$#
echo -e \\n"Nombre d'arguments: $NUMARGS"
if [ $NUMARGS -eq 0 ]; then
HELP
fi
 
### Start getopts code ###
 
#Parse command line flags
#If an option should be followed by an argument, it should be followed by a ":".
#Notice there is no ":" after "h". The leading ":" suppresses error messages from
#getopts. This is required to get my unrecognized option code to work.
 
while getopts :u:b:h FLAG; do
case $FLAG in
u) #set option "url"
OPT_URL_REPO=$OPTARG
echo "-u utilise: $OPTARG"
echo "OPT_REPO_URL = $OPT_URL_REPO"
;;
b) #set option "branch"
OPT_BRANCH=$OPTARG
echo "-b utilise: $OPTARG"
echo "OPT_BRANCH = $OPT_BRANCH"
;;
h) #show help
HELP
;;
\?) #unrecognized option - show help
echo -e \\n"Option -${BOLD}$OPTARG${NORM} non permise."
HELP
#If you just want to display a simple error message instead of the full
#help, remove the 2 lines above and uncomment the 2 lines below.
#echo -e "Use ${BOLD}$SCRIPT -h${NORM} to see the help documentation."\\n
#exit 2
;;
esac
done
 
shift $((OPTIND-1)) #This tells getopts to move on to the next argument.
 
### End getopts code ###
 
while [ $# -ne 0 ]; do
PATH=$1
echo -e "Installation de ZDS dans le repertoire : $PATH sur $OSTYPE"\\n
 
### Verification du système cible ###
dist=`lsb_release -i`
echo "Distribution : $dist"
 
shift #Move on to next input file.
done
 
exit 0

À mon avis, c'est potentiellement parce qu'une de tes variables s'appelle PATH. Faudrait tester, mais ça pourrait foutre la merde avec la variable d'environnement.

lethom

Merci lethom, c'était ça mon problème. Ma variable PATH modifiait le chemin.

Merci bien à vous tous.

[HS] Vu l'objectif du script, ne serait ce pas plus pertinent de le faire en python que tu maitrise probablement mieux ? Il est installé sur 95% des distribs et est de toute façon un pré-requis essentiel au projet.

Kje

Bah python est peut-être installé presque partout, mais vu que j'aimerai que mon script m'installe aussi la bonne version de python si besoin j'ai pas trop le choix.

(Si lsb_release n’est pas installée ou pas dans le PATH, ce n’est pas en utilisant Python (autrement moins adapté à l’exécution de scripts externes) à la place de bash que ça va changer quoi que ce soit. — bon OK, nommer la variable PATH en Python n’aurait pas eu le même impact…)

Donc. Toucher à $PATH, qui est une variable réservée, dans un script (pour faire autre chose qu’ajouter des chemins à la liste) est tout sauf une bonne idée. Vu que l’essentiel des variables réservées sont en majuscules, un gros conseil: évite de CRIER inutilement.

PS: si l’indentation n’est pas requise par la machine ailleurs qu’en Python, elle reste fortement recommandée pour les humains, y compris soit meme.

PPS: Meme s’il est loin de tout voir, https://www.shellcheck.net/ est un moyen de progresser

Le sujet date de 2014, je pense qu’il est résolu depuis… :-°

Si lsb_release n’est pas installée ou pas dans le PATH, ce n’est pas en utilisant Python (autrement moins adapté à l’exécution de scripts externes) à la place de bash que ça va changer quoi que ce soit. — bon OK, nommer la variable PATH en Python n’aurait pas eu le même impact…

Utiliser lsb_release a toujours été fragile (et de toute façon, le projet LSB est complètement mort maintenant). L’avantage de Python est qu’on n’a pas besoin de se reposer sur des commandes de ce genre. Le module standard platform est souvent suffisant, le module distro fait probablement mieux le taf que ce que LSB n’a jamais réussi à faire…

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte