首页 如何关闭Linux终端的回显?
文章
取消

如何关闭Linux终端的回显?

通过shell命令关闭回显

在Linux中通过stty相关指令可以关闭终端的回显,如下所示。

1
2
3
4
5
# turn off echo
stty -echo
# do something
# turn on echo
stty echo

如果是为了输入密码的话,也可用read命令的-s选项,如下所示。

1
2
# input your password
read -s password

C语言关闭回显

如果是为了输入密码而关闭回显的话,在C语言中,传统上有getpass函数。

1
2
3
#include <unistd.h>

char *getpass(const char *prompt);

但该函数现在已经被认为是过时的(obsolete),man中建议不要使用此函数,而是通过控制termios的ECHO标志来达到目的,这种做法也更为通用。一个简单的示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <stdio.h>
#include <termios.h>

void  getpass(unsigned char *key)
{
    struct termios old;
    struct termios new;
    char pass[32] = {0};

    // save old attr
    tcgetattr(STDIN_FILENO, &old);

    // turn off echo
    new = old;
    new.c_lflag &= ~(ECHO);
    tcsetattr(STDIN_FILENO, TCSANOW, &new);

    if (NULL == fgets(pass, sizeof(pass), stdin))
        pass[0] = '\0';

    // recover old attr
    tcsetattr(STDIN_FILENO, TCSANOW, &old);

    printf("%s", pass);

    return;
}
本文由作者按照 CC BY 4.0 进行授权