我为用户安装了Pip(不是系统范围的),我想在我的脚本中检查是否为该用户安装了pip,我使用sudo运行:sudo ./script.sh
我知道检查一个command -v pip3
的命令,当我以shell用户身份输入它时,该命令有效。
但我怎样才能在我的剧本中查看它?
command -v pip3
退出代码为1,因为我是root(因为sudo
)。
su -c "command -v pip3" "$SUDO_USER"
有退出代码1。
sudo -u "$SUDO_USER" command -v pip3
说"命令:找不到命令"
答案 0 :(得分:1)
最简单的是
sudo -u "$SUDO_USER" -i command -v pip3
-i
选项使sudo
使用其-c
选项将提供的命令行传递给用户配置的shell,而不是尝试直接执行命令。这是必要的,因为command
是一个内置的shell;它不作为独立的可执行文件存在。 (-i
选项运行“登录”shell。还有-s
选项运行非登录shell。请参阅下文。)
如果要明确指定shell,可以改为:
sudo -u "$SUDO_USER" /bin/sh -lc "command -v pip3"
同样,强制使用登录shell,这里使用-l
选项。
作为安全功能,sudo
通常会在执行shell(或单个命令)之前将$PATH
重置为“安全”值。该值不会在/etc/profile
和~/.profile
启动脚本中进行任何修改,如果没有这些修改 - 将一个或多个特定于用户的目录添加到路径中 - shell将不会找到为个人用户安装的pip3
等软件。
答案 1 :(得分:0)
通过将$ USER替换为特定用户名来使用以下命令。
sudo -H -u $USER bash -c 'command -v pip3'
同样,您可以作为另一个用户运行任何命令
语法:sudo -H -u $USER bash -c 'INSERT_COMMAND_HERE'