周五候机楼:标准流

欢迎来到另一个星期五...

现在是时候了解终端的一小部分了。 经过深思熟虑后,我决定创建一个有关 标准流; 尽管这是肤浅的,但我认为这是每个人都应该知道的。

标准流

标准流 它由用户和终端之间的几个通信通道组成。 这些输入/输出“通道”在执行命令时显示或捕获信息。

标准流的快速图表。

标准流的快速图表。

3个I / O连接为: 标准输入 标准输入, 标准输出 标准输出, 斯特德 标准错误.

标准输入:标准输入

标准输入是我们通过管道,重定向,键盘等从命令捕获信息的方式。 我们用文件描述符0标识它。

描述符是访问(在这种情况下)输入和输出通道的指示符。 这些是int值,通常为0、1和2。

一个标准输入的例子是:

排序<列出

它获取列表中的所有信息(在本例中为随机写入的数字),并且在将文件重定向到ls命令时,将按字母顺序对数字列表进行排序。 在此示例中,标志是隐式的。

标准输出:标准输出

顾名思义,标准输出通过控制台显示命令的输出。 如果我们写ls,它在屏幕上显示给我们的所有信息就是标准输出。 它由描述符1表示。

现在,我将尝试使用bash编写的脚本实例化stdin和stdout,仅仅是因为我喜欢bash haha​​ha。 🙂

测试文件

#!/ bin / bash如果[-t 0]; 然后回显“您正在使用stdout” elif [-t 1]; 然后回显“您正在使用标准输入”,否则回显“残酷错误” fi

现在,截图展示了如何使用脚本。 重定向或在脚本中使用管道时,请使用 测试 知道是否仅执行标准输出脚本,如果不是,则显然是标准输入。

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
有问题的脚本及其输出...

有问题的脚本及其输出...

切记修改命令并进行练习,以便您学习。

stderr:标准错误

标准错误是程序显示错误或诊断的方式。 它由描述符2表示。

为了理解这个概念,就是这种情况:当我们要保存命令错误时,我们考虑的第一件事就是将输出重定向到纯文本。

ls> info.txt

这将起作用,命令信息将存储在纯文本文件中。 但是在保存错误时,它不会存储该错误,而是在屏幕上显示该错误,并且纯文本文件为空。

相反,如果我们使用2>指示将stderr保存在文件中:

ls foo 2> info.txt

现在它将错误信息保存在文本文件中。

允许使用&>将stderr和stdout存储在单个命令中,其中Foo是不存在的目录

ls下载Foo&> info.txt

该文件将包含有关在Foo中运行ls时错误的信息,并将在“下载”下列出目录。

最后,那个著名的是什么 2>&1?

简单,将stderr重定向到stdout。 在&和1中间的&表示它将重定向到stdout。 如果不存在,它将类似于...“将错误重定向到文件1”。

并可以重定向:

  • 标准输出到文件
  • stderr到文件
  • 标准输出到标准错误
  • stderr到stdout
  • stderr和stdout到文件
  • 等等

今天的人就是这样。 我们阅读并感谢您的光临。 😀


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   埃利奥时间3000

    有趣。 多亏了您的教程,我更喜欢Bash。

  2.   昆西·马古(Quincy Magoo)

    亲爱的,有趣,但是您在以下行中有错误:

    “并且在将文件重定向到ls命令时”,应该是“并且在将文件重定向到sort命令时”。

    问候。

  3.   米格尔

    文本开头有错误,当您指示命令“ ls”时,应为“ sort”:
    “它将获取列表中的所有信息(在这种情况下为随机写入的数字),以及将文件重定向到ls命令时(此处将进行排序)”

    问候和感谢您分享您的工作

  4.   路人

    这对cron非常有用,在cron中您希望刷新输出(/ dev / null),但将错误存储在文件中。 另外,当我这样做时,我通常使用date命令来确切指定它们何时失败。

    Bash(sh)具有由Unix哲学开发的这些工具,“做一件事情,做好一件事情”

  5.   洛洛

    好吧,我什么都没发现

    1.    语音

      哈哈,很好的解释了,你不懂什么?