Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1365511
  • 博文数量: 245
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3094
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-12 14:51
文章存档

2011年(2)

2009年(152)

2008年(91)

我的朋友

分类:

2009-01-16 14:40:21

终端机的环境设定: stty, set

什么叫做‘终端机环境’啊?!我们在 首次登入 Linux 时就提过,可以在 tty1 ~ tty6 这六个文字介面的终端机 (terminal) 环境中登入,那么登入的时候我们可以取得一些字元设定的功能喔! 举例来说,我们可以利用倒退键 (backspace,就是那个←符号的按键) 来删除命令列上的字元, 也可以使用 [ctrl]+c 来强制终止一个指令的运行,当输入错误时,就会有声音跑出来警告。这是怎么办到的呢? 很简单啊!因为登入终端机的时候,会自动的取得一些终端机的输入环境的设定啊!

事实上,目前我们使用的 Linux distributions 都帮我们作了最棒的使用者环境了, 所以大家可以不用担心操作环境的问题。不过,在某些 Unix like 的机器中,还是可能需要动用一些手脚, 才能够让我们的输入比较快乐~举例来说,利用 [backspace] 删除,要比利用 [Del] 按键来的顺手吧! 但是某些 Unix 偏偏是以 [del] 来进行字元的删除啊!所以,这个时候就可以动动手脚啰~

那么如何查阅目前的一些按键内容呢?可以利用 stty (setting tty 终端机的意思) 呢! stty 也可以帮助设定终端机的输入按键代表意义喔!

[root@linux ~]# stty [-a]
参数:
-a  :将目前所有的 stty 参数列出来;
范例:
范例一:列出所有的按键与按键内容
[root@linux ~]# stty -a
speed 38400 baud; rows 40; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ;
eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase
= ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl
ixon -ixoff -iuclc -ixany -imaxbel 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

我们可以利用 stty -a 来列出目前环境中所有的按键列表,在上头的列表当中,需要注意的是特殊字体那几个, 此外,如果出现 ^ 表示 [Ctrl] 那个按键的意思。举例来说, intr = ^C 表示利用 [ctrl] + c 来达成的。 几个重要的代表意义是:

    * eof : End of file 的意思,代表‘结束输入’。
    * erase : 向后删除字元,
    * intr : 送出一个 interrupt (中断) 的讯号给目前正在 run 的程序;
    * kill : 删除在目前指令列上的所有文字;
    * quit : 送出一个 quit 的讯号给目前正在 run 的程序;
    * start : 在某个程序停止后,重新启动他的 output
    * stop : 停止目前萤幕的输出;
    * susp : 送出一个 terminal stop 的讯号给正在 run 的程序。

记不记得我们讲过 Linux 底下的几个热键 啊?没错! 就是这个 stty 设定值内的 intr / eof 啰~至于删除字元,就是 erase 那个设定值啦! 如果你想要用 [ctrl]+h 来进行字元的删除,那么可以下达:

[root@linux ~]# stty erase ^h

那么从此之后,你的删除字元就得要使用 [ctrl]+h 啰,按下 [backspace] 则会出现 ^? 字样呢! 如果想要回复利用 [backspace] ,就下达 stty erase ^? 即可啊! 至于更多的 stty 说明,记得参考一下 man stty 的内容喔!

除了 stty 之外,其实我们的 bash 还有自己的一些终端机设定值呢!那就是利用 set 来设定的! 我们之前提到一些变数时,可以利用 set 来显示,除此之外,其实 set 还可以帮我们设定整个指令输出/输入的环境。 例如记录历史命令、显示错误内容等等。

[root@linux ~]# set [-uvCHhmBx]
参数:
-u  :预设不启用。若启用后,当使用未设定变数时,会显示错误讯息;
-v  :预设不启用。若启用后,在讯息被输出前,会先显示讯息的原始内容;
-x  :预设不启用。若启用后,在指令被执行前,会显示指令内容(前面有 ++ 符号)
-h  :预设启用。与历史命令有关(下节介绍);
-H  :预设启用。与历史命令有关(下节介绍);
-m  :预设启用。与工作管理有关(未来介绍);
-B  :预设启用。与刮号 [] 的作用有关;
-C  :预设不启用。若使用 >  等,则若档案存在时,该档案不会被覆盖。
范例:
范例一:显示目前所有的 set 设定值
[root@linux ~]# echo $-
himBH
# 那个 $- 变数内容就是 set 的所有设定啦! bash 预设是 himBH 喔!

范例二:设定 "若使用未定义变数时,则显示错误讯息"
[root@linux ~]# set -u
[root@linux ~]# echo $vbirding
-bash: vbirding: unbound variable
# 预设情况下,未设定/未宣告 的变数都会是‘空的’,不过,若设定 -u 参数,
# 那么当使用未设定的变数时,就会有问题啦!很多的 shell 都预设启用 -u 参数。
# 若要取消这个参数,输入 set +u 即可!

范例三:执行前,显示该指令内容。
[root@linux ~]# set -x
[root@linux ~]# echo $HOME
+ echo /root
/root
++ echo -ne '\033]0;root@linux:~\007'
# 看见否?要输出的指令都会先被列印到萤幕上喔!前面会多出 + 的符号!

另外,其实我们还有其他的按键设定功能呢!就是在 /etc/inputrc 这个档案里面设定。

[root@linux ~]# cat /etc/inputrc
# do not bell on tab-completion
#set bell-style none

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
.....以下省略.....

还有例如 /etc/DIR_COLORS* 与 /etc/termcap 等,也都是与终端机有关的环境设定档案呢! 不过,事实上,鸟哥并不建议您修改 tty 的环境呢,这是因为 bash 的环境已经设定的很亲和了, 我们不需要额外的设定或者修改,否则反而会产生一些困扰。不过,写在这里的资料, 只是希望大家能够清楚的知道我们的终端机是如何进行设定的喔! ^_^

阅读(1044) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~