欢迎来到另一个星期五...
现在是时候了解终端的一小部分了。 经过深思熟虑后,我决定创建一个有关 标准流; 尽管这是肤浅的,但我认为这是每个人都应该知道的。
标准流
标准流 它由用户和终端之间的几个通信通道组成。 这些输入/输出“通道”在执行命令时显示或捕获信息。
3个I / O连接为: 标准输入 标准输入, 标准输出 标准输出, 斯特德 标准错误.
标准输入:标准输入
标准输入是我们通过管道,重定向,键盘等从命令捕获信息的方式。 我们用文件描述符0标识它。
一个标准输入的例子是:
排序<列出
它获取列表中的所有信息(在本例中为随机写入的数字),并且在将文件重定向到ls命令时,将按字母顺序对数字列表进行排序。 在此示例中,标志是隐式的。
标准输出:标准输出
顾名思义,标准输出通过控制台显示命令的输出。 如果我们写ls,它在屏幕上显示给我们的所有信息就是标准输出。 它由描述符1表示。
现在,我将尝试使用bash编写的脚本实例化stdin和stdout,仅仅是因为我喜欢bash hahaha。 🙂
测试文件
#!/ 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到文件
- 等等
今天的人就是这样。 我们阅读并感谢您的光临。 😀
有趣。 多亏了您的教程,我更喜欢Bash。
亲爱的,有趣,但是您在以下行中有错误:
“并且在将文件重定向到ls命令时”,应该是“并且在将文件重定向到sort命令时”。
问候。
文本开头有错误,当您指示命令“ ls”时,应为“ sort”:
“它将获取列表中的所有信息(在这种情况下为随机写入的数字),以及将文件重定向到ls命令时(此处将进行排序)”
问候和感谢您分享您的工作
这对cron非常有用,在cron中您希望刷新输出(/ dev / null),但将错误存储在文件中。 另外,当我这样做时,我通常使用date命令来确切指定它们何时失败。
Bash(sh)具有由Unix哲学开发的这些工具,“做一件事情,做好一件事情”
好吧,我什么都没发现
哈哈,很好的解释了,你不懂什么?