我有像下面这样的bash脚本:
#!/bin/bash
echo "Please enter your username";
read username;
echo "Please enter your password";
read password;
Run Code Online (Sandbox Code Playgroud)
我希望当用户在终端上输入密码时,不应该显示密码(或者应该显示*******).我该如何实现这一目标?
当我尝试:$ stty raw -echo
在我的终端上(Bash on OS X 10.6).它确实有点刺激,就像终端挂在那里一样.然后我查阅手册:
stty - 设置终端设备接口的选项
原始(-raw)
如果设置,则更改终端的模式,以便不执行输入或
输出处理.如果未设置,请将终端的模式更改为执行输入和输出处理的某种合理状态.请注意,由于终端驱动程序不再具有单个RAW位,因此无法在设置raw之前直接设置标记.这意味着取消设置raw可能不会放回之前有效的所有设置.要将终端设置为原始状态然后准确还原,建议使用以下shell代码:Run Code Online (Sandbox Code Playgroud)save_state=$(stty -g) stty raw ... stty "$save_state"
回声(-echo)
每个键入的字符回显(不回显).
所以它应该以原始模式转换终端,然后返回我输入的内容?有人可以解释这个命令的作用吗?当一个论证冲破时,有什么区别,例如raw
和-raw
?他们的意思是一样的吗?有什么资源我可以学到这个吗?
我正在编写一个Bourne shell脚本,并且输入密码如下:
echo -n 'Password: '
read password
Run Code Online (Sandbox Code Playgroud)
显然,我不希望密码被回显到终端,所以我想在读取期间关闭回声.我知道有办法解决这个问题stty
,但是当我阅读联机帮助页时,我会问社区的好处.;)
我找到了这个问题的答案......只是想为其他人提供一些信息,他们也遇到了这个问题......
在我的系统中,我遇到了这个问题,因为我使用了sh main.sh
处理我的shell脚本而忽略了"Bash"和"Shell"之间的区别.
为了解决此问题,您可以尝试通过使用chmod +x
和使用./
来执行程序将模式更改为可执行文件.
祝好运!