我正在编写一个可能需要 su 来运行命令的 bash 脚本。像这样的东西-
echo "安装XYZ系统" echo "请输入root密码-" su -c "java -cp ./Installer.jar com.company.FmMain ; exit"
有没有办法让 su 打印字符(星号或其他东西),以便用户在输入密码时有一些视觉反馈?
您必须首先将密码读入变量中,在su
. 请参阅问题如何在使用“read”读取密码时回显星号 (*)?read
有关使用来完成此操作的示例。
然后,您必须使用expect
将此密码传递给出现的密码提示su
。请参阅问题如何使用 expect 通过 ssh 连接到系统并更改主机系统的密码?做类似事情的例子。
我不建议在 Linux 中使用掩码密码,因为它违背了预期的正常行为,并且可能会使用户感到困惑,特别是如果他们是有经验的 Linux 用户。读取密码的标准方法是在接受密码之前关闭回显并禁用对特殊字符(如转义序列等)的处理(这通常通过设置终端属性 - tcsetattr 等来完成),这就是 su 的工作方式。
有标准库函数,例如 getpass 可以为您执行此操作: http ://www.gnu.org/s/hello/manual/libc/getpass.html
尝试实现您自己的方法会带来潜在的安全隐患。我强烈警告这一点。