2016-08-16 1 views
1

J'ai créé un script bash simple pour voir si rbenv est installé. J'ai installé rbenv l'échelle du système au lieu de par utilisateur using this guide et confirmé qu'il est installé pour les utilisateurs:Vérification du logiciel installé avec sudo

[email protected]:~$ rbenv version 
2.1.4 (set by /usr/local/rbenv/version) 

[email protected]:~$ sudo -i 
[email protected]:~$ rbenv version 
2.1.4 (set by /usr/local/rbenv/version) 

Je dois vérifier si elle est installée pour l'utilisateur root parce que je suis en train de faire les travaux d'administration système dans le script:

#!/bin/bash 

exec 5> debug_output.txt 
BASH_XTRACEFD="5" 

[ $UID != 0 ] && exec sudo $0 "[email protected]" 

if [[ ! `rbenv version | grep "2.1.4"` ]]; then 
    echo "rbenv not installed ... do something" 
else 
    echo "rbenv installed" 
fi 

Cependant, quand je lance le script pour le contexte utilisateur normal (en utilisant sudo):

[email protected]:~$ sudo ./test.sh 
./test.sh: line 5: rbenv: command not found 
rbenv not installed ... do something 

Pourquoi mon script ne ramassant le contexte fo r l'utilisateur root et en détectant que rbenv est réellement installé?

Mise à jour: ajout sortie de débogage

+ '[' 0 '!=' 0 ']' 
++ grep 2.1.4 
++ rbenv version 
+ [[ ! -n '' ]] 
+ echo 'rbenv not installed' 
+1

Cela pourrait aider: [Comment déboguer un script bash?] (Http://unix.stackexchange.com/q/155551/74329) – Cyrus

+0

@Cyrus ok, sortie de débogage ajoutée ... – Godzilla74

+0

D'après ce que je peux supposer , Je ne cours pas en fait 'sudo -i' dans mon script, à la place, juste en ajoutant' sudo' aux commandes, donc mon chemin rbenv n'est pas chargé car je ne charge pas le profil bash pour l'utilisateur root? – Godzilla74

Répondre

0

/usr/local/ (ou exécutable où rbenv est installé) n'est pas dans le chemin exécutable de votre utilisateur lors de l'exécution sudo. Utilisez -i ou ajoutez /usr/local/ à votre $PATH.