linux bash控制终端环境设置


bash控制终端环境设置: stty和set

回到顶部
bash前台进程就是系统前台进程,但是bash后台进程不一定是系统后台进程。
在bash环境下有很多的按键功能,例如退格键backspace可以删除命令行上的字符,ctrl+c可以强制终止前台进程。 我们也可以对这些按键功能进行重新设置。使用stty命令即可查看当前bash终端各种按键的功能,也可以使用stty重新设置按键功能意义。 stty为setting tty的缩写。stty命令常用范例如下所示:
[peter@study ~]$ stty [-a]
-a选项可以列出当前控制终端所有的信息。
列出当前bash控制终端所有的按键信息:
[peter@study ~]$ stty -a
speed 38400 baud; rows 35; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; discard = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke -flusho -extproc
上面输出中的^表示Ctrl键。几个重要的组合键意义如下:
intr : 为interrupt的缩写,给前台进程发送中断信号,强制进程终止退出;
quit : 给前台进程发送quit信号;
erase : 向后删除命令行字符;
kill : 删除命令行上的所有字符;
eof : 为End of file的缩写,表示文件输入的结束;
start : 重新启动被停止stop进程的输出output;
stop : 停止前台进程的屏幕输出;
susp : 发送suspend信号给前台进程,使前台进程进入后台暂停。
想要重新设置某个组合键的功能,例如上面erase的功能组合键为crtl+?,现在想把erase的组合键设置为crtl+h, 就可以按照如下方式设置:
[peter@study ~]$ stty erase ^h
这样设置后,在命令行删除字符就得使用ctrl+h,按下backspace则会出现^?字样! 恢复利用backspace,就下达stty erase ^?即可! 更多stty的说明可以参考man stty!
在windows环境下,很多软件默认的储存快捷键是crtl+s,如果你经常在Windows和Linux之间切换, 那么在Linux环境下使用vim时,想要保存文件的时候可能会习惯的按下crtl+s!在linux下ctrl+s其实是stop的意思, 这样vim进程就被暂停停止了,无论怎么操作都不会有任何反应,这时我们就可以按下crtl+q让vim进程重新start!
除了利用stty设置控制终端环境外,bash也有自己的一些终端设定值!那就是利用 set 来设定的! 我 们之前提到一些变量时,可以利用 set 来显示,除此之外,其实 set 还可以帮我们设定整个命令输 出/输入的环境。 例如记录历史命令、显示错误内容等等。
[peter@study ~]$ set [-uvCHhmBx]
选项与参数:
-u :默认不启用。当使用未定义的变量时,会显示错误讯息;
-v :默认不启用。在讯息被输出前,会先显示讯息的原始内容;
-x :默认不启用。在命令被执行前,会显示命令内容,前面有++符号;
-h :默认启用。与历史命令有关;
-H :默认启用。与历史命令有关; -m :默认启用。与作业管理有关;
-B :默认启用。与刮号[]的作用有关;
-C :默认不启用。若使用 > 等,则若文件存在时,该文件不会被覆盖。
$-变量为当前bash已经设置的所有set设置,使用echo命令显示目前所有的set设定值:
[peter@study ~]$ echo $-
himBH
可以看到当前bash默认的设置为himBH!
设定bash"若使用未定义变量时,则显示错误讯息":
[peter@study ~]$ set -u
[peter@study ~]$ echo $petering
-bash: petering: unbound variable
很多shell都会默认开启该选项,这样如果变量为未定义变量时,bash就会提示错误信息。 输入set +u即可取消该设置!
范例三:执行前,显示该命令内容。
[peter@study ~]$ set -x
++ printf '\033]0;%s@%s:%s\007' peter study '~'
# 这个是在列出提示字符的句柄!
[peter@study ~]$ echo ${HOME}
+ echo /home/peter
/home/peter
++ printf '\033]0;%s@%s:%s\007' peter study '~'

[peter@study ~]$ set -x
[peter@study ~]$ echo $HOME
+ echo /home/peter
/home/peter

这样设置后,在命令执行之前,bash会先将命令输出到屏幕,前面会有+符号!
其实还有其他的按键设定功能呢!可以在/etc/inputrc文件中设定,还有/etc/DIR_COLORS*与/usr/share/terminfo/*文件等,也都是与终端有关的环境配置文件呢!
事实上,并不建议修改控制终端tty的环境呢,因为bash的环境已经设定的很亲和了, 我们不需要额外的设定或者修改,否则反而会产生一些麻烦。这里只是向大家介绍控制终端tty是如何进行设置的!
bash默认的组合键汇总如下:
bash默认组合键
bash默认组合键
组合键 组合键功能意义
Ctrl + C intr,为interrupt的缩写,给前台进程发送中断信号,强制当前进程终止退出
Ctrl + D 输入结束EOF,为End of file的缩写,表示文件输入的结束;
Ctrl + M 相当于Enter键!
Ctrl + S stop,暂停屏幕的输出,停止前台进程的屏幕输出;
Ctrl + Q start,重新启动被停止stop进程的输出output,恢复屏幕的输出
Ctrl + U kill,删除命令行上的所有字符;
Ctrl + Z susp,发送suspend信号给前台进程,使前台进程进入后台暂停。暂停目前的命令
Ctrl + ? erase,相当于backspace键,向后删除命令行字符;

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读