【问题标题】:Two possible Sudo passwords in shell scriptshell 脚本中两个可能的 Sudo 密码
【发布时间】:2015-08-11 15:53:52
【问题描述】:

我在使用两个可能的 root 管理员密码部署 Mac 计算机时遇到问题。我正在尝试创建一个 shell 脚本来卸载应用程序,并且需要注入两个密码。如果“密码 1”正确,则脚本完成且没有任何错误。这就是我现在的位置。有什么建议么?

echo "password 1" | sudo "command"
if [ $? –ne 0 ]; then
## last command didn’t work, let’s try another password
  echo "password 2" | sudo "command"
fi

输出

RT20787-MAC:desktop tsstech$ sh Uninstall_script.sh 
Password:Sorry, try again.
Password:
sudo: 1 incorrect password attempt
Uninstall_script.sh: line 21: [: –ne: binary operator expected
Password:

【问题讨论】:

  • 您是否考虑过使用无密码sudo?如果您愿意将密码放在任何人都可以阅读的 shell 脚本中,那么您可能根本不需要密码。这是一个quick tutorial,可能会对您有所帮助。
  • 您需要使用sudo -S 才能从标准输入中读取密码。

标签: macos bash shell passwords sudo


【解决方案1】:

你的测试有问题:

if [ $? –ne 0 ] #–ne: binary operator expected

在 $? 中添加引号? :

if [ "$?" -ne 0 ]

或使用 != 运算符:

if [ $? != 0 ]

【讨论】:

  • 我不知道$? 可以扩展为空字符串的任何情况,因此引号不应该有任何区别。 -ne 在技术上是正确的选择,尽管我不知道 $? 可以产生的任何值会导致 -ne!= 产生不同的结果。
  • (虽然,给定的错误消息非常强烈地暗示$? 正在以某种方式扩展为空字符串。)
【解决方案2】:

只需向一个 sudo 提供两个密码。我的 sudo 需要选项 -S 从标准输入读取密码。

echo -e "password 1\npassword 2" | sudo -S "command"

这假设您的 "command" 不需要从标准输入读取,但另请参阅下面的 cmets。

【讨论】:

  • “命令不读取标准输入”sudo 记住了一段时间的成功尝试。所以这可能是一个更简单的解决方法:echo -e "password1\npassword2" | sudo true && sudo command.../bin/true 不消耗stdin...
猜你喜欢
  • 1970-01-01
  • 2011-12-28
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 2019-02-21
  • 2011-04-20
  • 2018-07-20
相关资源
最近更新 更多