实用技巧:“禁用”Linux终端输出的回显

本文介绍如何使用POSIX规范中的Termios结构控制终端输入密码的回显功能,包括禁用ECHO宏来隐藏密码输入过程,并提供了一个简单的C语言示例程序。
 

Termios结构是在POSIX规范中定义的一个标准接口,通过设置termios类型的数据结构中值及相关函数调用便可以对终端接口进行控制。

 

控制终端的输出回显主要用到"本地模式"中可用的c_lflag的宏ECHO,ECHO宏定义为:启用输入字符的本地回显功能

 

此功能最常见的应用莫过于控制输入密码的回显,如通过sudo /etc/**获取管理权限或终端登录MySQL时输入的密码是不会显示出来的。

 

而termios结构的定义包含在termios.h头文件中,直接看代码:

 

 

#include 
#include 
#include 

#define PASSWORD_LEN 12

int main(){
struct termios initialrsettings, newrsettings;
char password[PASSWORD_LEN + 1];
tcgetattr(fileno(stdin),&initialrsettings); #获取termios结构并保存
newrsettings = initialrsettings;
newrsettings.c_lflag &= ~ECHO; #清除变量c_lflag中由ECHO定义的比特
printf("Please Enter Password:");
if( tcsetattr(fileno(stdin),TCSAFLUSH,&newrsettings) != 0 ){
fprintf(stderr,"Could not set arrributes/n");
}else{
fgets(password,PASSWORD_LEN,stdin);
tcsetattr(fileno(stdin),TCSANOW,&initialrsettings); #还原之前的termios结构
fprintf(stdout,"/nYou entered %s as the password/n",password);
}
exit(0);
}

 

最后编译、运行之,达到预期目的~

 

不同Linux发行版需要包含的头文件可能存在细微的差异,以下是我主机的信息:

 

 

Hardware:i686
OS:Linux (ubuntu desktop 7.10)
Release:2.6.22-14-generic
Version:#1 SMP Tue Feb 12 07:42:25 UTC 2008
 
Linux终端中,通常输出会自动显示,包括提示符。如果你想让终端在有输出时暂时隐藏提示符,这通常不是标准的命令行行为,但是有一些工具和方法可以帮助你达到类似的效果: 1. **无延迟模式**(No Echo Mode):在bash shell下,你可以使用`stty -echo`命令暂时禁用键盘输入的回显,这时用户输入的内容不会立即显示,但会在你按下Enter键后一起显示。当你完成操作后,可以用`stty echo`恢复回显。 ```bash stty -echo your_input_here stty echo ``` 记得每次结束操作前恢复回显状态。 2. **Tmux/Tilda编辑器**:Tmux是一个强大的终端multiplexer,其中的`tmux clear-screen`命令可以清除当前屏幕并保持原输入状态。而Tilda (`~/.tilderc`)是一个自启动脚本,在每次打开新终端时自动加载,可以配置Tmux以在终端底部提供临时消息,而不是提示符。 3. **tmux或screen的hide-prompt选项**:这两个工具都有类似的设置,可以在需要的时候隐藏提示符。例如,`tmux set-option -g status off`关闭屏幕底部的状态栏,`screen -t new-session hide-prompt`在新的会话中隐藏提示符。 4. **使用ansi转义序列**:虽然这不是Linux特性,但在某些情况下,你可以使用ANSI转义序列来临时更改终端输出样式,如将颜色更改为白色背景黑色文本,这样提示符就不太明显了。这通常通过编程或shell脚本来实现。 请注意,这些方法都不支持实时撤销输出,只是提供一种视觉上的“隐藏”。对于长时间的任务,用户可能需要手动刷新屏幕或查看历史记录来查看完整的输出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值