linux键盘输入不对,linux – 少得到stderr的键盘输入?

$ls -l /dev/fd/

lrwx------ 1 me me 64 2009-09-17 16:52 0 -> /dev/pts/4

lrwx------ 1 me me 64 2009-09-17 16:52 1 -> /dev/pts/4

lrwx------ 1 me me 64 2009-09-17 16:52 2 -> /dev/pts/4

当在一个交互式终端上登录时,所有三个标准文件描述符都指向相同的东西:你的TTY(或伪TTY).

$ls -fl /dev/std{in,out,err}

lrwxrwxrwx 1 root root 4 2009-09-13 01:57 /dev/stdin -> fd/0

lrwxrwxrwx 1 root root 4 2009-09-13 01:57 /dev/stdout -> fd/1

lrwxrwxrwx 1 root root 4 2009-09-13 01:57 /dev/stderr -> fd/2

按照惯例,我们从0读取并写入1和2.然而,没有任何东西阻止我们这样做.

当你的shell运行ls -l * |较少,它创建一个从ls的文件描述符1到较少的文件描述符0的管道.显然,较少的不能再从文件描述符0读取用户的键盘输入 – 它试图获得TTY返回,但它可以.

如果没有离开终端,打开(“/ dev / tty”)会给它TTY.

但是,如果失败了…你能做什么?最后一次尝试获取TTY,假设文件描述符2附加到文件描述符0将被附加到相同的东西,如果它没有被重定向.

这不是防故障的:

$ls -l * | setsid less 2>/dev/null

在这里,给定自己的会话较少(因此它不再是终端活动进程组的一部分,导致open(“/ dev / tty”)失败),并且其文件描述符2已更改 – 现在较少立即退出,因为它输出到TTY,但它无法获得任何用户输入.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值