尝试在 Bash 脚本中传递两个变量

尝试在 Bash 脚本中传递两个变量

我正在尝试使以下脚本适用于ufw需要我按 y 或 n 确认命令的命令。此外,我想将我的密码传递给命令sudo(我知道,这不是个好主意)。

echo 'y' | { echo 'my password'; } | sudo ufw reset

密码sudo位有效,但我从命令中收到以下错误消息ufw reset

Resetting all rules to installed defaults. Proceed with operation (y|n)? Aborted

命令被中止,而不是接受我尝试发送的“y”。有人能告诉我我做错了什么吗?

答案1

您使用的是yto echo 'my password',而不是 to sudo

使用块对两个回声进行分组:

{ echo 'my password' ; echo y ; } | sudo ufw reset

sudo通常从终端而不是标准输入读取密码,除非您提供-S选项。

答案2

你可以通过以下方式实现:

printf '%s\n%s\n' 'your_password' 'y' | sudo -S ufw reset

或者su -c

printf '%s\n' 'your_password' | sudo -S su -c "{ yes | ufw reset; }"
  • 这使用了一些不错的小工具yes代替echo y
  • 我更喜欢用printf而不是echo来表示未知字符串。->看到这个

注意:这确实不是一个好主意。最好将其添加ufw到文件中的 NOPASSWD 列表中sudoers看这里。或者,如果你想重复/自动运行该命令,你可以将其添加为 root cronjob

相关内容