Linux shell编程学习笔记25:tty

1 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: <http://www.gnu.org/software/coreutils/>
Report tty translation bugs to <http://translationproject.org/team/>
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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/191978.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机毕业设计 基于SpringBoot的在线考试系统的研究与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

[Hive] INSERT OVERWRITE DIRECTORY要注意的问题

在使用Hive的INSERT OVERWRITE语句时&#xff0c;需要注意以下问题&#xff1a; 数据覆盖&#xff1a;INSERT OVERWRITE语句会覆盖目标目录中的数据。因此&#xff0c;在执行该语句之前&#xff0c;请确保目标目录为空或者你希望覆盖的数据已经不再需要。数据格式&#xff1a;…

香港科技大学广州|智能制造学域机器人与自主系统学域博士招生宣讲会—中国科学技术大学专场

&#x1f3e0;地点&#xff1a;中国科学技术大学西区学生活动中心&#xff08;一楼&#xff09;报告厅 【宣讲会专场1】让制造更高效、更智能、更可持续—智能制造学域 &#x1f559;时间&#xff1a;2023年11月16日&#xff08;星期四&#xff09;18:00 报名链接&#xff1a…

Django视图层()

视图层 django视图层&#xff1a;Django项目下的views.py文件&#xff0c;它的内部是一系列的函数或者是类,用来处理客户端的请求后处理并返回相应的数据 三板斧 HttpResponse # 返回字符串 render # 返回html页面&#xff0c;并且在返回浏览器之前还可以给html文件…

matlab 二自由度操纵稳定性汽车模型

1、内容简介 略 19-可以交流、咨询、答疑 二自由度操纵稳定性汽车模型 二自由度、操纵稳定性、操纵动力学 2、内容说明 1 模型假设 忽略转向系的影响&#xff0c;以前、后轮转角作为输入&#xff1b;汽车只进行平行于地面的平面运动&#xff0c;而忽略悬架的作用&#xf…

linux时间同步

搭建集群时&#xff0c;都会先设置时间同步&#xff0c;否则会出现多种问题。 方式一&#xff1a; 1.安装ntp软件 yum install -y ntp 2.更新时区 删除原有时区&#xff1a;sudo rm -f /etc/localtime 加载新时区&#xff1a;sudo ln -s /usr/share/zoneinfo/Asia/Shangh…

H5游戏源码分享-超级染色体小游戏

H5游戏源码分享-超级染色体小游戏 游戏玩法 不断地扩大发展同颜色的色块 用最少的步数完成游戏 <!DOCTYPE html> <html><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width,user-scalableno,init…

java实现插入排序

图解 以下是Java实现插入排序的代码&#xff1a; public class InsertionSort {public static void main(String[] args) {int[] arr {5, 2, 4, 6, 1, 3};insertionSort(arr);System.out.println(Arrays.toString(arr)); // output: [1, 2, 3, 4, 5, 6]}public static void i…

Node.js 框架 star 星数量排名——NestJs跃居第二

文章目录 什么是NodeJs?什么是NodeJs框架?图表数据框架排名 什么是NodeJs? Node.js是一个基于Chrome V8引擎的JavaScript运行环境&#xff0c;它使得我们可以在服务器端使用JavaScript开发高效、可扩展的应用程序。作为一个快速、轻量级的平台&#xff0c;Node.js在Web开发领…

Python爬虫抓取微博数据及热度预测

首先我们需要安装 requests 和 BeautifulSoup 库&#xff0c;可以使用以下命令进行安装&#xff1a; pip install requests pip install beautifulsoup4然后&#xff0c;我们需要导入 requests 和 BeautifulSoup 库&#xff1a; import requests from bs4 import BeautifulSou…

《未来之路:技术探索与梦想的追逐》

创作纪念日 日期&#xff1a;2023年07月05日文章标题&#xff1a;《从零开始-与大语言模型对话学技术-gradio篇&#xff08;1&#xff09;》成为创作者第128天 在这个平凡的一天&#xff0c;我撰写了自己的第一篇技术博客&#xff0c;题为《从零开始-与大语言模型对话学技术-…

Web APIs——正则表达式使用

1、什么是正则表达式 正则表达式&#xff08;Regular Expression&#xff09;是用于匹配字符串中字符组合的模式。在JavaScript中&#xff0c;正则表达式也是对象 通常用来查找、替换那些符合正则表达式的文本&#xff0c;许多语言都支持正则表达式 1.1 正则表达式使用场景 例如…

新能源充电桩物联网应用之工业4G路由器

新能源充电桩是智慧城市建设中不可缺少且可持续发展的重要设施&#xff0c;而工业4G路由器物联网应用为其提供了更加高效、智能、实时的管理方式。充电桩通过工业4G路由器可以与充电运营商的管理中心建立稳定的连接&#xff0c;实现双向数据传输&#xff0c;为用户提供优质的充…

基于单片机的塑料厂房气体检测系统设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、设计的主要内容二、系统硬件设计三、软件设计实物 四、结论五、 文章目录 概要 本文首先分析了基于单片机的可燃…

媒体软文投放的流程与媒体平台的选择

海内外媒体软文&#xff1a;助力信息传播与品牌建设 在当今数字化时代&#xff0c;企业如何在庞大的信息海洋中脱颖而出&#xff0c;成为品牌建设的领军者&#xff1f;媒体软文投放无疑是一项强大的策略&#xff0c;通过选择合适的平台&#xff0c;精准投放&#xff0c;可以实…

android studio新版本gradle Tasks找不到assemble

最近需要打包arr&#xff0c;但android studio新版本为了加快编译速度&#xff0c;取消了gradle下的assemble任务&#xff0c;网上还没有博主更新解决方案&#xff0c;因此一直找不到解决方案&#xff0c;后来尝试如下操作才解决&#xff0c;方便后来者解决。 先将这里勾选上&…

【FastCAE源码阅读9】鼠标框选网格、节点的实现

一、VTK的框选支持类vtkInteractorStyleRubberBandPick FastCAE的鼠标事件交互类是PropPickerInteractionStyle&#xff0c;它扩展自vtkInteractorStyleRubberBandPick。vtkInteractorStyleRubberBandPick类可以实现鼠标框选物体&#xff0c;默认情况下按下键盘r键开启框选模式…

【Python基础】网络编程之Epoll使用一(符实操:基于epoll实现的实时聊天室)

&#x1f308;欢迎来到Python专栏 &#x1f64b;&#x1f3fe;‍♀️作者介绍&#xff1a;前PLA队员 目前是一名普通本科大三的软件工程专业学生 &#x1f30f;IP坐标&#xff1a;湖北武汉 &#x1f349; 目前技术栈&#xff1a;C/C、Linux系统编程、计算机网络、数据结构、Mys…

Java学习之路 —— Day2(OOP)

文章目录 1. 方法2. OOP2.1 static2.2 单例模式2.3 继承2.4 多态 3. 常用API3.1 包3.2 String3.3 ArrayList 1. 方法 方法定义时要使用public static修饰&#xff0c;这是和C最不同的地方&#xff0c;因为java都是基于类执行的。 Java的参数传递机制是值传递&#xff0c;即传…

记录第一次利用CVE-2023-33246漏洞实现RocketMQ宿主机远程代码执行的兴奋

我依然记得自己第一次发现xss漏洞时候的兴奋: 我也记得自己第一次发现sql输入时候的快乐: 直到最近我终于收获了人生的第一个远程代码执行漏洞的利用&#xff08;RCE:remote code execute&#xff09;&#xff0c;虽然这个漏洞的危害远超过了前两个&#xff0c;但是快乐不如前…