如何关闭终端中的回声?

Jos*_*ver 15 unix terminal sh

我正在编写一个Bourne shell脚本,并且输入密码如下:

echo -n 'Password: '
read password
Run Code Online (Sandbox Code Playgroud)

显然,我不希望密码被回显到终端,所以我想在读取期间关闭回声.我知道有办法解决这个问题stty,但是当我阅读联机帮助页时,我会问社区的好处.;)

San*_*nda 42

stty_orig=`stty -g`
stty -echo
echo 'hidden section'
stty $stty_orig
Run Code Online (Sandbox Code Playgroud)

  • 是的,如果它已经关闭,它会在之后关闭回声. (4认同)
  • 如果没记错的话,这当然是我以前做过的方式。出于好奇,这与`stty -echo 有什么不同吗?读 foo; stty回声`? (2认同)

Rum*_*kin 13

read -s password 适用于我的linux机箱.

  • 这是有用的信息,但-s似乎是一个Bash扩展,因为`read -s foo`在Dash中生成`read:1:Illegal option -s`(Ubuntu符号链接到`/ bin/sh`的Bourne shell). (3认同)

Pra*_*inY 6

您可以使用read 命令的“-s”选项来隐藏用户输入。

echo -n "Password:"
read -s password
if [ $password != "..." ]
then
        exit 1; # exit as password mismatched #
fi
Run Code Online (Sandbox Code Playgroud)

如果您想从终端隐藏以进行打印,您也可以使用“stty -echo” 。并使用“stty echo”恢复终端设置

但我认为从用户“read -s password”获取密码输入已经足够了。