2011-12-03 144 views
1

我试图编写一个setup.sh脚本,用于在安装应用程序时搜索并安装所需的组件。如果找不到必需的组件,它将提示安装它。我已经使用sudo apt-get install对于这一点,我想给用户提供的密码传递给sudo的,就像这样:Here Document not working with sudo su

read passwd 
sudo apt-get install clisp <<EOF 
$passwd 
$passwd 
EOF 

但是,这是行不通的。输入的密码没有被传递给sudo。为什么这不会发生?我的使用有任何错误吗?

+0

为什么有两个'$ passwd'表达式?一个用于'sudo',好的。但第二个? –

+0

考虑更新'/ etc/sudoers'来允许你在没有密码的情况下运行该命令(我认为是''NOPASSWD')。它比用纯文本将密码存储在文件中更安全。 –

回答

4

密码不是从标准输入中读取,而是从“当前终端”中读取。这不能通过重定向来改变。但是sudo提供了一个选项-S,它从标准输入而不是从终端读取密码。

编辑:对整个问题的更好的解决方案是避免截取密码。如果需要密码,sudo将自行要求密码。使用-A选项,您还可以为此问题提供图形用户界面。并且由于sudo为该输入保留了一个时间戳,因此它在接下来的15分钟内不会询问密码(默认情况下,即可配置)。因此多个sudo调用也不是问题。

相关问题