我在 Mac 上,但我认为这通常适用于 Unix。
我正在学习 shell 脚本,但我似乎缺少一些东西。当我在普通终端中时,我可以使用诸如for循环之类的脚本语法与命令结合使用来做事。
但是....bash为shell脚本打开一个解释器。
这是我感到困惑的地方,因为终端不是已经是 shell 脚本的解释器,正如脚本在提供给 stdin 时可以工作的事实所证明的那样?
额外的问题:它bash与bash -i, 根据man“开始交互式会话”有何不同……这不是您bash自己输入时会发生的情况吗?在我看来,这与首先在普通终端中没有什么不同......
从这个对Linux 的回答: /dev/console 、 /dev/tty 和 /dev/tty0 之间的区别
从 文档:
Run Code Online (Sandbox Code Playgroud)/dev/tty Current TTY device /dev/console System console /dev/tty0 Current virtual console在过去的美好时光
/dev/console是系统管理员控制台。TTY 是用户连接到服务器的串行设备。现在/dev/console和/dev/tty0代表当前的显示通常是一样的。例如,您可以通过添加console=ttyS0到grub.conf. 之后,您/dev/tty0是监视器,并且/dev/console是/dev/ttyS0.
通过“系统控制台”,/dev/console就像是一个文本物理终端的设备文件,就像/dev/tty{1..63}是虚拟控制台的设备文件。
通过“/dev/console并/dev/tty0代表当前显示和通常是相同的”,/dev/console在我看来它也可以是虚拟控制台的设备文件。/dev/console似乎更像/dev/tty0是/dev/tty{1..63}(/dev/tty0是当前活动的虚拟控制台,可以是 中的任何一个/dev/tty{1..63})。
什么是/dev/console?它是干什么用的?
不/dev/console玩了Linux内核相同作用/dev/tty的过程?(/dev/tty …
Posix 是否需要任何设备?例如,/dev/urandom,/dev/zero或/dev/null?
我怀疑不是因为非 *nix 操作系统,而是想要求完整性。
这是来自我的 Ubuntu
$ ls /dev/*tty*
/dev/tty /dev/tty17 /dev/tty26 /dev/tty35 /dev/tty44 /dev/tty53 /dev/tty62 /dev/ttyS12 /dev/ttyS21 /dev/ttyS30
/dev/tty0 /dev/tty18 /dev/tty27 /dev/tty36 /dev/tty45 /dev/tty54 /dev/tty63 /dev/ttyS13 /dev/ttyS22 /dev/ttyS31
/dev/tty1 /dev/tty19 /dev/tty28 /dev/tty37 /dev/tty46 /dev/tty55 /dev/tty7 /dev/ttyS14 /dev/ttyS23 /dev/ttyS4
/dev/tty10 /dev/tty2 /dev/tty29 /dev/tty38 /dev/tty47 /dev/tty56 /dev/tty8 /dev/ttyS15 /dev/ttyS24 /dev/ttyS5
/dev/tty11 /dev/tty20 /dev/tty3 /dev/tty39 /dev/tty48 /dev/tty57 /dev/tty9 /dev/ttyS16 /dev/ttyS25 /dev/ttyS6
/dev/tty12 /dev/tty21 /dev/tty30 /dev/tty4 /dev/tty49 /dev/tty58 /dev/ttyprintk /dev/ttyS17 /dev/ttyS26 /dev/ttyS7
/dev/tty13 /dev/tty22 /dev/tty31 /dev/tty40 /dev/tty5 /dev/tty59 /dev/ttyS0 /dev/ttyS18 /dev/ttyS27 /dev/ttyS8
/dev/tty14 /dev/tty23 /dev/tty32 /dev/tty41 /dev/tty50 …Run Code Online (Sandbox Code Playgroud) 通过测试此问题提供的方法,我可以看到 /dev/tty 和 /dev/tty0 之间的区别。但我真的很想知道这些设备的实际用途(比如它们将被使用的情况)。
与TTY 号码相关,看起来有 64 个 TTY(find /dev -name 'tty[0-9]*' | cut -c 9- | sort -n | tail -n 1和文档)。tty0是当前虚拟控制台,Ctrl+ Meta+F1报道,它的连接到tty1,和tty在GNOME终端报告,它的连接到/dev/pts/N。使用众所周知的Ctrl+ Meta+F*键盘快捷键只能访问 TTY 1 到 12 ,那么/dev/ttyN13 到 64 用于什么?
转义序列与 ASCII 控制字符有常见的配对,例如 Ctrl-C 和 Ctrl-Z 分别与 ETX 和 SUB 配对。
在维基百科控制代码页面上,有最多的配对,但没有引用的参考。
控制字符和键序列配对是标准的一部分吗?
Linux 和其他操作系统的列表在哪里?
是否有手册页列出了这些配对?
它们纯粹是几十年的不成文约定吗?
参考
stty -a列出了一些以下所有命令都在我的 debian 终端中运行。
ls /dev |grep ptmx
/dev/ptmx
ls /dev/pts
0 1 ptmx
Run Code Online (Sandbox Code Playgroud)
/dev/ptmx 和 和有/dev/pts/ptmx什么区别?
ls /dev/tty* |sort
/dev/tty
/dev/tty0
/dev/tty1
/dev/tty10
Run Code Online (Sandbox Code Playgroud)
/dev/tty 和 /dev/tty0 (/dev/tty1....) 之间有关系吗?
/dev/tty 控制所有其他 /dev/tty[number] ?
指定systemd.debug-shell=1为内核参数类型有效:当 systemd 启动挂起时,我可以通过 Alt+F9 切换到 shell。
但是这个外壳是完全不可能的,因为一个动画
[ *** ] A start job is running for Create Volatile Files and
Directories (4min 23s / no limit)
Run Code Online (Sandbox Code Playgroud)
横幅正在破坏我的提示和命令行输出。
因此,我的问题是:如何在我的 shell tty9 中禁用这个阻碍 systemd 的输出?
我可以将它显示在 tty1 中,即主控制台 - 但按原样,它使 systemd 调试外壳无法使用。
这是 Fedora 29 下的 systemd。
Linux有7个虚拟控制台,对应7个设备文件/dev/tty[n]。
虚拟控制台是否作为进程运行,就像终端模拟器一样?(我不确定。似乎虚拟控制台是内核的一部分,如果这是正确的,它就不能是一个进程。)
是不是像终端模拟器一样,是基于伪终端实现的虚拟控制台?(我猜不会。否则,虚拟控制台的设备文件将是/dev/pts/[n], 而不是/dev/tty[n])
谢谢。
我了解到这个命令:
echo -e "\a"
Run Code Online (Sandbox Code Playgroud)
在本地系统上触发蜂鸣声,而此命令:
echo -e "\a" >/dev/console
Run Code Online (Sandbox Code Playgroud)
在远程系统上触发蜂鸣声。
为什么是这样?什么是>/dev/console部分在做什么?
为什么echo -e "\a"在远程机器上执行会在本地而不是远程触发哔声?
为什么“echo” - 命令不喜欢 sudo ?
是否有类似 OSI 层的方案?请向我提供一些外部文件。
我对将 stdout/stderr 重定向到文件只有一个基本的了解,但问题更可能是指“Gnu/Linux/Kernel”是如何设计的,以便重新重定向到
“ > /dev/console” 用于解决远程蜂鸣声。
遥控器是否echo "Hello World"需要重定向到 /dev/console ?