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

Rob*_*ker 4 command-line bash scripts

我正在尝试使以下脚本适用于ufw期望我按 y 或 n 来确认我的命令的命令。另外我想将我的密码传递给sudo命令(我知道,坏主意)。

echo 'y' | { echo 'my password'; } | sudo ufw reset
Run Code Online (Sandbox Code Playgroud)

sudo密码位的作品,但我从以下错误消息ufw reset的命令:

Resetting all rules to installed defaults. Proceed with operation (y|n)? Aborted
Run Code Online (Sandbox Code Playgroud)

该命令正在中止,而不是接受我试图发送的“y”。谁能告诉我我做错了什么?

cho*_*oba 11

你正在管道yecho 'my password',而不是sudo

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

{ echo 'my password' ; echo y ; } | sudo ufw reset
Run Code Online (Sandbox Code Playgroud)

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

  • @RobertBaker:那是因为 sudo 缓存了密码并且不会第二次要求它。 (2认同)

pLu*_*umo 8

你可以这样实现:

printf '%s\n%s\n' 'your_password' 'y' | sudo -S ufw reset
Run Code Online (Sandbox Code Playgroud)

或与su -c

printf '%s\n' 'your_password' | sudo -S su -c "{ yes | ufw reset; }"
Run Code Online (Sandbox Code Playgroud)
  • 这使用了漂亮的小工具yes而不是echo y.
  • 我更喜欢printf而不是echo未知字符串。->看到这个

注意:这真的是一个坏主意。最好ufwsudoers文件中添加到 NOPASSWD 列表中。见这里。或者,如果您想重复/自动运行该命令,您可以将其添加为 root cronjob