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'
[bashスクリプトのデバッグ方法](http://unix.stackexchange.com/q/155551/74329) – Cyrus
@Cyrus ok、デバッグ出力を追加... – Godzilla74
私が推測できるものから実際にはsudo -iをコマンドで実行しているわけではなく、sudoをコマンドに追加するだけでrootユーザのbashプロファイルをロードしていないので、私のrbenvパスはロードされていません。 – Godzilla74