AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 446166
Accepted
Tim
Tim
Asked: 2018-05-27 05:08:46 +0800 CST2018-05-27 05:08:46 +0800 CST 2018-05-27 05:08:46 +0800 CST

命令 `tty` 的输出和文件 `/dev/tty` 是否都指向当前 bash 进程的控制终端?

  • 772
  1. 从man tty

    tty - 打印连接到标准输入的终端的文件名

    $ tty
    /dev/pts/2
    
  2. 来自 APUE:

    历史上,大多数版本的 UNIX 系统中控制终端的名称都是/dev/tty. POSIX.1 提供了一个运行时函数,我们可以调用它来确定控制终端的名称。

    #include <stdio.h>
    char *ctermid(char *ptr);
    
    $ ls -la /dev/tty
    crw-rw-rw- 1 root tty 5, 0 May 26 00:16 /dev/tty
    

所以我想知道命令的输出tty和文件是否/dev/tty 都引用了当前 bash 进程的控制终端?

如果是,为什么命令tty输出一个伪终端从文件/dev/pts/2,它不同于/dev/tty?

由于终端仿真器lxterminal和其中运行的 bash shell 使用伪终端对,伪终端从站不是/dev/pts/2bash shell 的控制终端吗?

/dev/tty并且/dev/pts/2不是彼此的符号链接,所以它们是不同的文件吗?

谢谢。

后续帖子我当前的控制终端和`/dev/tty`之间有什么关系?

tty pty
  • 2 2 个回答
  • 1465 Views

2 个回答

  • Voted
  1. Best Answer
    AlexP
    2018-05-27T05:18:52+08:002018-05-27T05:18:52+08:00

    命令tty(1) 返回连接到标准输入的终端名称。这可能是控制终端,也可能不是。该进程甚至可能有一个控制终端,但该终端必须连接到标准输入并不是一成不变的。

    从(1)的 POSIX手册页tty:

    tty 实用程序应将作为标准输入打开的终端的名称写入标准输出。使用的名称应等同于将由 ttyname()POSIX.1-2008 的系统接口卷中定义的函数返回的字符串。

    自己试试吧;跑

    < /dev/null sh -c 'tty; sleep 10; echo "Done."'
    

    并在看到“not a tty”写出的消息后按 Ctrl+C,tty因为标准输入不是(伪)终端。

    另一方面,/dev/tty它始终是进程的控制终端的同义词,前提是该进程实际上有一个控制终端。

    • 3
  2. ilkkachu
    2018-05-27T05:25:31+08:002018-05-27T05:25:31+08:00

    命令的输出tty和文件是否/dev/tty都引用了当前进程的控制终端?

    嗯,不,它们不一样。tty输出连接到它的标准输入的 tty 的名称。这不一定与控制终端(/dev/tty所指的)相同。

    $ tty
    /dev/pts/12
    $ tty < /dev/pts/1
    /dev/pts/1
    $ tty < /dev/null
    not a tty
    

    当然,通常如果您stdin连接到终端,它就是控制终端。

    我见过的用例tty是确定脚本是否以交互方式运行。对于这种用途,检查stdin而不是控制终端允许检测stdin连接到终端以外的东西以及用户无法提供交互式输入的情况。例如maybe_interactive.sh < some_input_file从交互式外壳运行。

    /dev/tty 和 /dev/pts/2 不是彼此的符号链接,所以它们是不同的文件吗?

    /dev/tty不能是符号链接,因为不同进程的控制终端不同,并且每个进程的符号链接都是相同的。

    • 2

相关问题

  • 在我的应用程序中使用 gpm 作为鼠标输入从 mc(午夜指挥官)开始

  • systemctl:只能通过 tty2 工作?(同一用户登录到 tty3&tty1。)

  • 在伪终端内运行伪终端

  • 终端上退格键的行为

  • 为什么 ssh 实用程序被视为 pty?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    ssh 无法协商:“找不到匹配的密码”,正在拒绝 cbc

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    如何卸载内核模块“nvidia-drm”?

    • 13 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add 返回:“连接代理时出错:没有这样的文件或目录” 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya 为什么 Linux 使用 LF 作为换行符? 2017-12-20 05:48:21 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve