• Linux shell编程学习笔记25:tty


    tty的由来

    在 1830 年代和 1840 年代,开发了称为电传打字机(teletypewriters)的机器,这些机器可以将发件人在键盘上输入的消息“沿着线路”发送在接收端并打印在纸上。

    电传打字机的名称由teletypewriters, 缩短为teletypes,并最终缩短为 TTY。

    电传打字机:teletypewriters →  teletypes → tty

    在电子计算机问世后,电传打字机成为那个时代与大型小型计算机和大型计算机交互的默认方式,并在软件中模拟演变为伪电传打字机或虚拟电传打字机 (PTS:pseudo terminal device)。

    在 Linux 和其他类 Unix 操作系统(如 macOS)的桌面环境中,终端窗口和应用程序(如 x-term 和 Konsole)都是虚拟电传打字机的示例。

    2 linux中的tty

    在Linux中,我们的终端窗口是电传打字机 (TTY) 的软件仿真,作为伪电传打字机 (PTS) 连接到伪电传打字机多路复用器。 

    Linux的设备一般位于/dev目录下,我们可以使用命令

    ls /dev/tty*

    来查看系统中的tty设备。如:

    csdn @ edu zsh $ ls /dev/tty*
    /dev/tty
    csdn @ edu zsh $ bash
    [csdn ~]$ ls /dev/tty*
    /dev/tty

     

     在csdn提供的Linux测试环境中,只有1个tty设备。

    在实际的Linux系统中,可能存在多个tty设备,如:

     user @ host bash $ls /dev/tty*
    /dev/tty    /dev/tty23  /dev/tty39  /dev/tty54    /dev/ttyAMA3  /dev/ttyS0
    /dev/tty0   /dev/tty24  /dev/tty4   /dev/tty55    /dev/ttyp0    /dev/ttyS1
    /dev/tty1   /dev/tty25  /dev/tty40  /dev/tty56    /dev/ttyp1    /dev/ttyS10
    /dev/tty10  /dev/tty26  /dev/tty41  /dev/tty57    /dev/ttyp2    /dev/ttyS11
    /dev/tty11  /dev/tty27  /dev/tty42  /dev/tty58    /dev/ttyp3    /dev/ttyS12
    /dev/tty12  /dev/tty28  /dev/tty43  /dev/tty59    /dev/ttyp4    /dev/ttyS13
    /dev/tty13  /dev/tty29  /dev/tty44  /dev/tty6     /dev/ttyp5    /dev/ttyS14
    /dev/tty14  /dev/tty3   /dev/tty45  /dev/tty60    /dev/ttyp6    /dev/ttyS15
    /dev/tty15  /dev/tty30  /dev/tty46  /dev/tty61    /dev/ttyp7    /dev/ttyS2
    /dev/tty16  /dev/tty31  /dev/tty47  /dev/tty62    /dev/ttyp8    /dev/ttyS3
    /dev/tty17  /dev/tty32  /dev/tty48  /dev/tty63    /dev/ttyp9    /dev/ttyS4
    /dev/tty18  /dev/tty33  /dev/tty49  /dev/tty7     /dev/ttypa    /dev/ttyS5
    /dev/tty19  /dev/tty34  /dev/tty5   /dev/tty8     /dev/ttypb    /dev/ttyS6
    /dev/tty2   /dev/tty35  /dev/tty50  /dev/tty9     /dev/ttypc    /dev/ttyS7
    /dev/tty20  /dev/tty36  /dev/tty51  /dev/ttyAMA0  /dev/ttypd    /dev/ttyS8
    /dev/tty21  /dev/tty37  /dev/tty52  /dev/ttyAMA1  /dev/ttype    /dev/ttyS9
    /dev/tty22  /dev/tty38  /dev/tty53  /dev/ttyAMA2  /dev/ttypf
    user @ host bash $

    2.1 tty命令的功能、格式和说明

    tty 命令将打印您的伪电传从属设备用于连接到主设备的设备文件的名称。实际上,这就是您的终端窗口的编号。输入命令: tty --help可以查看tty命令的帮助信息,其中包括了命令格式和说明

    user @ edu bash $ tty --help              
    Usage: tty [OPTION]...
    Print the file name of the terminal connected to standard input.

      -s, --silent, --quiet   print nothing, only return an exit status
          --help     display this help and exit
          --version  output version information and exit

    GNU coreutils online help:
    Report tty translation bugs to
    For complete documentation, run: info coreutils 'tty invocation'

     

    2.1.1 命令格式

    tty [-s][--help][--version]

    2.1.2 参数说明

    • -s或--silent或--quiet                   不显示任何信息,只回传状态代码。
    • --help                                          在线帮助。
    • --version                                     显示版本信息。

     下面我们结合实例来看看tty命令。

    2.2 tty命令的实例

    2.2.1 tty不带参数:显示当前终端

    csdn @ edu bash $ tty
    /dev/pts/1

     在终端输入tty命令可以看到我们我们已连接到位于 /dev/pts/1 的设备文件。

    2.2.2 tty -s 

    -s(静默)选项让 tty 不生成任何输出。但它执行完成后,仍会产生一个退出值。

    在bash中:

    csdn @ edu bash $ tty -s; if [ $? ]; then echo $? ":is in a tty"; else echo  $? ":is not in a tty"; fi
    0 :is in a tty

    在zsh中:

    csdn @ edu zsh $ tty -s; if [ $? ]; then; echo $? ":is in a tty"; else echo  $? ":is not in a tty"; fi
    0 :is in a tty

    可以看到,tty -s顺利执行后退出值为0。

    其实tty命令的退出值还有可能是:

    • 0:如果标准输入来自 模拟的或物理的TTY 设备。
    • 1:如果标准输入不是来自 TTY 设备。
    • 2:语法错误,使用了不正确的命令行参数。
    • 3:发生写入错误。

    所以,我们可以对上面的实例,使用 case in语句 做进一步的修改:

    csdn @ edu zsh $ tty -s; case $? in; 0) echo 0-ok;; 1) echo 1-no tty;;  2) echo 2-bad cmd;; 3) echo 3-write error;; esac 
    0-ok

     

  • 相关阅读:
    Mongodb操作基础 分片
    Echarts绘制各种数据可视化图表案例(效果+代码)
    0020__如何获取windows系统的串口列表
    MCE | 曲贝替定——来自海洋的抗软组织肿瘤化合物
    JS判断类型(typeof+constructor+toString)
    LQ0222 买不到的数目【DP+数学】
    Linux中的man命令
    2.C语言--链表-头插、头删、尾插、尾删、查找、插入和删除
    Oracle-12c如何从ASM备份里面恢复OCR
    python随机生成指定长度的字符串
  • 原文地址:https://blog.csdn.net/Purpleendurer/article/details/134409280