繁体   English   中英

Bash脚本需要sudo密码

[英]Bash scripts requiring sudo password

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

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

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

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

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

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

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

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

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

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

另一种方法:

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
}

也许更容易阅读:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM