Bash脚本需要sudo密码

时间:2010-10-20 09:23:19

标签: bash sudo

我正在创建一个Bash安装程序脚本,该脚本为OSX和Linux编译和安装一些库。因为我的脚本中的一些命令(“make install”,“apt-get install”,“port install”等)需要sudo,我需要用户提供密码。

目前,只要第一个sudo命令即将执行,就会要求用户输入密码,但由于这通常是在编译阶段之后,因此在启动脚本和输入密码之间总会有一段时间。

我想在脚本的开头放入密码输入+检查。另外,我很好奇这是否真的是一种安装系统库的好方法。

或者我可以在不需要sudo的本地沙箱位置安装库,但是我必须告诉apt-get和macports安装他们的库以外的默认/ usr / local /和/选择/本地,我不知道该怎么做,也不知道这是一个聪明的想法。

4 个答案:

答案 0 :(得分:65)

要获取密码,只需将sudo echo "Thanks."放在脚本的开头。

但我更喜欢这个解决方案:

if [[ $UID != 0 ]]; then
    echo "Please run this script with sudo:"
    echo "sudo $0 $*"
    exit 1
fi

答案 1 :(得分:5)

对于那些不想提升整个脚本的人(通过在需要的脚本中仅使用sudo来限制风险),接受的答案的第一部分sudo echo "Thanks"有效,但不会响应sudo密码退出脚本失败。要实现这一点,包含sudo命令并希望在使用之前确保sudo访问的脚本可以从

开始
if [[ ! $(sudo echo 0) ]]; then exit; fi

需要注意的是,您依赖于sudoers超时的存在,该超时将持续脚本的持续时间以抑制其余提示。

答案 2 :(得分:1)

另一种方法:

function checkSudo() {
    if ((EUID != 0)); then
        echo "Granting root privileges for script ( $SCRIPT_NAME )"
        if [[ -t 1 ]]; then
            sudo "$0" "$@"
        else
            exec 1>output_file
            gksu "$0" "$@"
        fi
        exit
    fi
}

答案 3 :(得分:0)

也许更容易阅读:

[ $(whoami) == "root" ] || exit