使用 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
。
我整理了一个简单的 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'
/usr/local/
(或安装 rbenv 可执行文件的任何地方)不在用户的可执行文件路径中。使用 -i 或将 /usr/local/
添加到您的 $PATH
。