小编Igo*_*nko的帖子

为什么需要按两次 ^D 才能退出 `cat`?

让我们运行cat然后输入athen ^D- 你会看到cat没有退出。

cat+ a+ Enter+比较^D- 现在 cat 确实退出了。

那么,为什么在第一种情况下^D需要按两次退出cat,而^D在第二种情况下只需要按一次?

tty pty stty

13
推荐指数
1
解决办法
807
查看次数

为什么END键没有terminfo条目?

在 Debian 系统上END按键生成^[[F

$ showkey -a

Press any keys - Ctrl-D will terminate this program

^[[F     27 0033 0x1b
         91 0133 0x5b
         70 0106 0x46
Run Code Online (Sandbox Code Playgroud)

但是为什么这个键和弦不在terminfo 中

$ infocmp -1 | grep end
kend=\EOF,
Run Code Online (Sandbox Code Playgroud)

尽管如此,ncurses设法正确地将其识别为KEY_END. 如何?

TERMxterm-256color

顺便说一句,拥有kendandend而不仅仅是背后的动机是end什么?(对于khomehome

编辑

正如 Johan Myréen 的评论中所说,khome字符串是按下 Home 键产生的序列。但是在 Debian 上按 Home 键会产生home. 为什么?

$ showkey -a

Press …
Run Code Online (Sandbox Code Playgroud)

termcap terminal ncurses terminfo

9
推荐指数
2
解决办法
1718
查看次数

如何防止bash自动完成尾随点?

假设我有一个文件名和不同的扩展名:

test.tex
test.pdf
Run Code Online (Sandbox Code Playgroud)

只输入不带扩展名的文件名,然后输入整个文件名更容易。这是可能的,因为相应的程序知道他们需要的扩展名并自动附加它。以下示例完美运行:

tex test
pdf-viewer test
Run Code Online (Sandbox Code Playgroud)

但是在这里使用 bash 补全总是让我厌烦添加尾随点。例如:

tex te<TAB>
Run Code Online (Sandbox Code Playgroud)

变成了

tex test.
Run Code Online (Sandbox Code Playgroud)

但是应用程序会失败并报错;每次点击后我都必须按退格键<TAB>:-(

如何告诉 bash 在进行自动完成时不要添加尾随点?

bash autocomplete

5
推荐指数
1
解决办法
323
查看次数

当另一端的进程终止时,为什么在 pty 上阻塞 read() 返回?

当未打开 pty 的从属端时,strace在该过程中,会read(master_fd, &byte, 1);显示以下内容:

read(3, 
Run Code Online (Sandbox Code Playgroud)

因此,当没有人连接到 pty 的从属端时,read()等待数据 - 它不会返回错误。

但是当 pty 的从属端被一个进程打开并且该进程退出时,这个进程会read()死掉:

read(3, 0xbf8ba7f3, 1)                  = -1 EIO (Input/output error)
Run Code Online (Sandbox Code Playgroud)

pty 是用

master_fd = posix_openpt(O_RDWR|O_NOCTTY)
Run Code Online (Sandbox Code Playgroud)

pty的slave端用

comfd = open(COM_PORT, O_RDWR|O_NOCTTY)
Run Code Online (Sandbox Code Playgroud)

为什么在read()打开 pty 从属端的进程退出时退出?这是在哪里描述的?

linux c tty pty pseudoterminal

5
推荐指数
1
解决办法
309
查看次数

IXON 和 IXOFF tty 属性有什么区别?

具体来说,让我们用伪终端术语来说话。假设我们有文件描述符masterslave一个伪终端对(假设它是一个控制 tty)。禁用IXONon master(或slave,其工作原理相同)意味着当我们这样做时write(master, &control_s_code, 1)read(slave, &byte, 1)将获得此代码。同样的担忧control_q_code。问题是:禁用有IXOFF什么作用?

tty pty

3
推荐指数
1
解决办法
1019
查看次数

如何编译 LESS 寻呼机?

我想less用最新的修复程序进行编译。

我这样做:

git clone https://github.com/gwsw/less
cd less/
autoheader
autoconf
./configure
make
Run Code Online (Sandbox Code Playgroud)

但是这样make说:

make: *** No rule to make target 'funcs.h', needed by 'main.o'. Stop.
Run Code Online (Sandbox Code Playgroud)

没有创建的 Makefile 规则 funcs.h

那么,如何less从源代码编译呢?

compiling less

2
推荐指数
1
解决办法
385
查看次数

TTY 与普通文件有何不同?

我试图了解ssh-t选项:

-t 强制伪终端分配。这可用于在远程机器上执行任意基于屏幕的程序,这非常有用,例如在实现菜单服务时。多个 -t 选项强制 tty 分配,即使 ssh 没有本地 tty。

所以,TTY 是一个设备。引用 TTY 的一种方法是通过描述符(通过打开 TTY 设备获得)。STDIN、STDOUT 和 STDERR 是描述符。但它们不一定是指 TTY 设备。-t选项强制它们引用 TTY 设备。这是为了理解这个选项的作用的正确推理方式吗?

使用普通的 STDIN、STDOUT 和 STDERR 可能无法实现的 TTY 有什么特别之处?

-t欢迎使用选项用例的示例。

通过哪种机制ssh分配该 TTY?是ssh在服务器上还是在客户端上创建新的 TTY?如何检查这个?(/dev/必须出现一个新节点或其他什么……)这个新的 TTY 如何与现有的 STDIN、STDOUT 和 STDERR 相关联?

ssh pty pseudoterminal

2
推荐指数
1
解决办法
527
查看次数

标签 统计

pty ×4

tty ×3

pseudoterminal ×2

autocomplete ×1

bash ×1

c ×1

compiling ×1

less ×1

linux ×1

ncurses ×1

ssh ×1

stty ×1

termcap ×1

terminal ×1

terminfo ×1