zoukankan      html  css  js  c++  java
  • 浅析Linux中stty命令的作用、常用用法及案例使用

    一、设备文件处理与磁盘文件的区别

      先说几个比较直观的感觉。首先,在你通过键盘(一般是标准的输入的终端设备),输入字符,直到你输入的回车键(键盘上面的 Enter 为回车键,不是换行键;换行的 ACCII 为 10,回车为 13;换行在程序中的体现就是 ),你的程序才会有“反应”,给人一种好像就是回车后你的程序才接受到你输入的数据;

      其次,你在程序中写一个 printf(“This is a demo ”); 你会发现你的下一个输出就是在下一行的最左边开始输出的,但是,回车与换行的本身功能是:

       为 return,回车,即使光标回到当前行的头;

       为 newline,换行,即光标移动到当前位置的下一行。

      所以,说明进程将你的 转化为了 。而在Linux下出现这些的原因,就是因为在终端设备与进程之间的中间,还有一个终端驱动器,里面有终端驱动函数。这里有两张图,便于大家理解。

      进程和终端间的数据传输和数据处理是由终端设备驱动程序来负责的,终端驱动程序是内核的一部分。可以通过tesetattr和tegetattr函数来改变终端驱动程序里里面的设置

      以上摘录至这篇文章:https://blog.csdn.net/suliangkuanjiayou/article/details/86665901

    二、stty 命令

    1、作用

      为了自己能够编写适合自己的终端驱动函数,即去修改终端驱动程序里面的设置。在Linux中有这个命令,就是 stty。

      stty:用于显示和修改终端命令行的相关设置(change and print terminal line settings)。

    2、常用参数

      stty 命令不带参数可以打印终端行设置,加上 -a 参数可以打印得更详细些。

      stty size :可以显示终端的大小,即行数和列数。

      stty 命令还可以更改终端行的设置,格式如下:stty SETTING CHAR

      其中,SETTING可以是如下:

    eof : 输入结束,文件结束,默认为Ctrl+D。比如:用cat >file来创建文件时,按Ctrl+D来结束输入。

    erase : 向后删除字符,擦除最后一个输入字符,默认为Ctrl+?。注意默认情况下退格键Backspace不是删除字符。

    intr : 中断当前程序,默认为Ctrl+C。

    kill : 删除整条命令,删除整行,默认为Ctrl+U。

    quit :退出当前程序,默认为Ctrl+或Ctrl+|。

    start : 启动屏幕输出,默认为Ctrl+Q。

    stop :停止屏幕输出,默认为Ctrl+S。

    susp : terminal stop当前程序,默认为Ctrl+Z。这样当前进程就会变成后台进程了。

    werase:删除最后一个单词,默认为Ctrl+W。

      stty 命令还有一些其他用法,如:stty -echo 关闭回显(比如在脚本中用于输入密码时),然后再用 stty echo 打开回显。

    #在命令行下,禁止输出大写的方法:
    stty iuclc     #开启
    stty -iuclc    #恢复
    
    #在命令行下禁止输出小写:
    stty olcuc    #开启
    stty -olcuc   #恢复
    
    #打印出终端的行数和列数:
    stty size
    
    #改变Ctrl+D的方法:
    stty eof "string"
    #系统默认是Ctrl+D来表示文件的结束,而通过这种方法,可以改变!
    
    #屏蔽显示:
    stty -echo   #禁止回显
    stty echo    #打开回显
    #测试方法:
    stty -echo;read;stty echo;read
    
    #忽略回车符:
    stty igncr     #开启
    stty -igncr    #恢复

    3、使用示例

    (1)打印终端行设置

    [root@web ~]# stty
    speed 38400 baud; line = 0;
    -brkint -imaxbel
    [root@web ~]# stty -a
    speed 38400 baud; rows 41; columns 132; line = 0;

    (2)打印当前终端的大小(行数和列数)

    [root@web ~]# stty size
    24 80

    (3)设置退格键Backspace的删除行为

      在默认情况下,我们按退格键Backspace时,会在屏幕上回显^H,而不是把前一个字符删除。比如使用sftp/ftp/sqlplus/ij等命令时,就会碰到这种情况。我们可以使用stty命令把Backspace的行为变成删除前一个字符。

    sftp> get abc^H^H^H^H
    
    #修改删除行为
    [root@web ~]# stty erase ^H

    (4)在vi编辑文件时按Ctrl+Q来结束终端僵死的局面

    [root@web ~]# vi 1.txt
    1
    2
    3
    Ctrl+S
    ~
    
    注:按了Ctrl+S之后,就会禁止屏幕输出,从而出现终端僵死的情况。
    这个时候,只要按Ctrl+Q就会结束这种局面,因为它会允许屏幕输出。
    Ctrl+Q
  • 相关阅读:
    一个链表,奇数位升序偶数位降序,让链表变成升序的
    LeetCode 046 Permutations 全排列
    LeetCode 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
    LeetCode 024 Swap Nodes in Pairs 交换链表中相邻的两个节点
    模板实现一个栈(内部使用动态申请的数组作为存储结构)
    004 Median of Two Sorted Arrays 两个有序数组的中位数
    静态链接与动态链接
    sizeof和strlen的区别
    const和define的区别
    lodash
  • 原文地址:https://www.cnblogs.com/goloving/p/15170646.html
Copyright © 2011-2022 走看看