相关疑难解决方法(0)

如何(以及为什么)使用 stderr 进行读写?

根据此答案由席利less从标准错误读取导航命令,如果它不能够打开/dev/tty

这似乎令人费解,因为我从未见过任何写入另一个程序的 stderr 流的内容,而且我什至不知道如何实现。

为读取和写入而打开 stderr 的目的是什么?如果这很有用,我如何在现代系统上使用它?(例如,是否有一些神秘的语法可以将某些东西传送到 stderr 而不是 stdin?)

pipe stderr

12
推荐指数
2
解决办法
1098
查看次数

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

在 Lubuntu 18.04 上,我在 lxterminal 中运行了一个 shell。它的控制终端是当前的伪终端从机:

$ tty
/dev/pts/2
Run Code Online (Sandbox Code Playgroud)

我想知道我当前的控制终端/dev/pts/2/dev/tty.

  1. /dev/tty就像我当前的控制终端/dev/pts/2

    $ echo hello > /dev/tty
    hello
    
    $ cat < /dev/tty
    world
    world
    ^C
    
    Run Code Online (Sandbox Code Playgroud)
  2. 但它们似乎是不相关的文件,而不是一个符号链接或硬链接到另一个:

    $ ls -lai /dev/tty /dev/pts/2
     5 crw--w---- 1 t    tty 136, 2 May 31 16:38 /dev/pts/2
    13 crw-rw-rw- 1 root tty   5, 0 May 31 16:36 /dev/tty
    
    Run Code Online (Sandbox Code Playgroud)

对于不同控制终端的不同会话,if /dev/tty保证是它们的控制终端。它如何成为不同的控制终端,而不是符号链接或硬链接?

那么它们之间的关系和区别是什么?任何帮助深表感谢!

这篇文章来自于较早的一个命令`tty`和文件`/dev/tty`的输出都是指当前bash进程的控制终端吗?

tty controlling-terminal pseudoterminal

8
推荐指数
2
解决办法
1384
查看次数

当标准输出通过管道传输时,程序如何输出到终端?

我被要求澄清这个问题。我不是在询问任何特定程序的行为,但我使用 ffmpeg 作为我询问的行为的示例。重申这个问题:

当一个程序通过stdout管道传输到另一个程序时,该程序如何也产生终端输出。是stderr输出流方面的唯一选择吗?

原问题:

我是一名长期的 Windows 开发人员,正在慢慢学习 Linux 以支持各种电子产品和编程爱好。我正在使用一些无头 Raspberry Pi,所以我只通过 ssh 终端与它们交互。我原以为终端输出只是stdout,实际上,当我通过Process类控制从 .NET Core 程序启动的子进程时,终端输出就是我的程序在拦截stdout流时接收到的内容。

但是我需要启动 bash 以便我可以将 ffmpeg 通过管道传输到 VLC,当我从终端“手动”执行此操作时,我意识到 ffmpeg 将处理细节写入终端,同时将数据传输到 VLC。我原以为命令行管道会重定向stdout到另一个程序的stdin.

我在使用 bash 时遇到了问题(它似乎没有将stdin数据从我的程序传递到使用bash -c "ffmpeg ... | cvlc ..."switch启动的程序),所以我正在考虑使用两个Process实例并以这种方式处理管道。

然后我想知道终端输出与管道输出的关系,以及幕后真正发生的事情。

编辑:当我写的,我忘了,我通常采集和输出都stdoutstderr使用Process类。在Windows下,stderr我的经验中很少使用,是否在Unix中stderr用于非错误终端输出可能是例行公事?只是猜测...

bash terminal pipe stdout

0
推荐指数
1
解决办法
450
查看次数