如何检查用户是否存在命令?

时间:2018-05-19 19:22:22

标签: bash shell

我为用户安装了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说"命令:找不到命令"

2 个答案:

答案 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'