2010-10-20 132 views
27

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

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

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

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

回答

51

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

但我愿意这样的解决方案:

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

清晰简单。谢谢! – 2010-10-20 09:57:39

+0

为什么'回声'为sudo,如果你可以直接'sudo'? – 2012-10-17 12:02:14

+0

@TobiasKienzler:因为这个问题。 – 2012-10-17 14:51:13

4

对于那些不想(只用在需要的地方在脚本中sudo来限制风险)所接受的第一部分,以提升整个脚本谁回答sudo echo "Thanks"的作品,但不会通过退出脚本来响应sudo密码失败。要做到这一点,脚本,包括sudo的命令,并希望确保sudo访问它的使用可能与

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

需要说明开始之前,你是依靠sudoers文件超时的存在,这将持续脚本的持续时间压制其余的提示。