我正在创建一个Bash安装程序脚本,该脚本为OSX和Linux编译和安装一些库。因为我的脚本中的一些命令(“make install”,“apt-get install”,“port install”等)需要sudo,我需要用户提供密码。
目前,只要第一个sudo命令即将执行,就会要求用户输入密码,但由于这通常是在编译阶段之后,因此在启动脚本和输入密码之间总会有一段时间。
我想在脚本的开头放入密码输入+检查。另外,我很好奇这是否真的是一种安装系统库的好方法。
或者我可以在不需要sudo的本地沙箱位置安装库,但是我必须告诉apt-get和macports安装他们的库以外的默认/ usr / local /和/选择/本地,我不知道该怎么做,也不知道这是一个聪明的想法。
答案 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