使用 sudo 检查已安装的软件

Checking for installed software with sudo

我整理了一个简单的 bash 脚本来查看是否安装了 rbenv。我在系统范围内安装了 rbenv 而不是每个用户 using this guide 并确认它已为两个用户安装:

user@ubuntu:~$ rbenv version
2.1.4 (set by /usr/local/rbenv/version)

user@ubuntu:~$ sudo -i
root@ubuntu:~$ rbenv version
2.1.4 (set by /usr/local/rbenv/version)

我必须检查它是否为 root 用户安装,因为我正在脚本中执行系统管理工作:

#!/bin/bash

exec 5> debug_output.txt
BASH_XTRACEFD="5"

[ $UID != 0 ] && exec sudo [=11=] "$@"

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

但是,当我 运行 普通用户上下文的脚本(使用 sudo)时:

user@aaabbbccc:~$ sudo ./test.sh
./test.sh: line 5: rbenv: command not found
rbenv not installed ... do something

为什么我的脚本没有获取 root 用户的上下文并检测到 rbenv 已实际安装?

更新:添加了调试输出

+ '[' 0 '!=' 0 ']'
++ grep 2.1.4
++ rbenv version
+ [[ ! -n '' ]]
+ echo 'rbenv not installed'
当 sudo 运行时,

/usr/local/(或安装 rbenv 可执行文件的任何地方)不在用户的可执行文件路径中。使用 -i 或将 /usr/local/ 添加到您的 $PATH