2016-08-16 6 views
1

私はrbenvがインストールされているかどうかを確認するための簡単なbashスクリプトを作成しました。私の代わりに、ユーザーごとのusing this guideのシステム全体のrbenvインストールし、それは両方のユーザー用にインストールされています確認:インストールされているソフトウェアの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) 

私は、スクリプト内のシステム管理者の仕事をしていますので、私はそれがrootユーザー用にインストールされているかどうかを確認する必要があります。

しかし、私は(sudoを使用して)通常のユーザーコンテキストのためのスクリプトを実行したときに
#!/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 

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

なぜ私のスクリプトは、foのコンテキストを拾っていませんr rootユーザーで、実際にrbenvがインストールされていることを検出していますか?

更新:sudoは実行時にデバッグ出力

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

[bashスクリプトのデバッグ方法](http://unix.stackexchange.com/q/155551/74329) – Cyrus

+0

@Cyrus ok、デバッグ出力を追加... – Godzilla74

+0

私が推測できるものから実際にはsudo -iをコマンドで実行しているわけではなく、sudoをコマンドに追加するだけでrootユーザのbashプロファイルをロードしていないので、私のrbenvパスはロードされていません。 – Godzilla74

答えて

0

/usr/local/(またはどこrbenv実行ファイルがインストールされている)は、ユーザーの実行可能ファイルのパスではありません追加。 $PATHに-iを使用するか、/usr/local/を追加してください。

関連する問題