愚蠢的短小:Bash 的 |、>、>>、<、2>>、2> 运算符
基本面大多偏空
词汇
愚蠢的短名单
这是一个简短的入门和参考指南,用于快速理解这些 Bash 运算符:,,,,,,,。主要>
通过一句话和一个例子来完成。1>
>>
1>>
<
2>>
2>>
本指南假设...
- ...您正在使用 Bash 终端。(与操作系统无关)
- ...您熟悉 CLI 的使用和导航。
- ...您熟悉 Bash 程序参数/标志/选项的概念。
内容
注意:对于本博客,我们假设我们只写入和读取文件。
基本面大多偏空
诚然,直到我编程生涯的后期,我才开始费心去研究Linux 中|
>
>>
和<
运算符的作用。如果你曾经按照 GitHub 的说明将 SSH 密钥添加到你的帐户,那么你已经使用过所谓的重定向运算符 了!
程序基础
一个程序有三个输入和输出流及其对应的编号。它有标准输入 (STDIN)(0)、标准输出 (STDOUT)(1) 和标准错误 (STDERR)(2)。
注意:我这张漂亮的图只是用来表达习惯。如果你自己写程序,可以有效地为流命名,并输出任意格式。不过你不知道这一点。如果你知道,就假装不知道,然后继续阅读。
例如:让我们以好的 ol' 为例ls
。当您ls
没有错误时,输入是./
(Bash 假定空是当前目录),stdout 是您随后看到的目录列表,而 stderr 什么也没有(因为没有错误需要捕获)。
程序会同时流式传输 stdout 和 stderr;这是因为不是“ stdout 或 stderr”,而是“stdout和stderr”。运行ls presentDir notPresentDir
,您可以同时看到 stdout 和 stderr。
默认情况下,stdout、stderr 和 stdin 都在终端中。使用这些重定向操作符,我们只是将这些流重定向到其他地方。
词汇
“程序”:这是终端中可执行文件的调用。每次你cd
或 时ls
,你都在运行一个程序。cat
:打印给定文件内容的程序。wc -w
:输出文件中单词数的程序。pbc
:我的别名xclip -selection clipboard
。对于 Mac 用户来说,这与 完全相同pbcopy
。pbp
:我的粘贴剪贴板的别名。
愚蠢的短名单
⭐️ 重定向操作符有三个与输出相关的数字:0 = 输入,1 = 输出,2 = 错误。如果没有指定数字,则默认为 1。⭐️如果
文件不存在,这些操作符会创建该文件。
>
将标准输出写入给定文件。
将标准输出发送到给定文件,而不是在终端中打印。
$ ls -1 > list.txt
$ cat list.txt
lubbock.txt
odessa.txt
baird.txt
>>
将 stdout 附加到给定文件。
将 stdout 添加到文件内容,而不是替换文件内容。
$ echo "Flamingo" >> favorite-birds.txt
$ cat favorite-birds.txt
Cardinal
Penguin
Flamingo
<
将文件重定向为标准输入
将文件内容作为标准输入传递。
例如:如果我们使用wc -w book.txt
,程序将输出 book.txt 的字数和文件名(例如:2394 book.txt
)。
如果我们使用 ,wc -w < book.txt
则表示我们将 book.txt 的内容“传入”作为输入,因此wc -w < book.txt
只会返回数字 ( 2394
),就像我们将整个内容输入到终端一样。
$ wc -w book.txt
2394 book.txt
$ wc -w < book.txt
2394
2>
:将 stderr 重定向到给定的文件。
如果出现错误,则将 stderr 重定向到文件而不是在终端中打印。
$ ls cuteDogPics 2> example.txt
$ cat example.txt
ls: cuteDogPics: No such file or directory
2>>
:将 stderr 附加到给定文件。
>>
与完全相同>
,但带有 stderr。
$ cp ~/Documents/Reports/June2019.xlsx ~/Desktop 2>> ~/error.log
$ cat ~/error.log
cp: /Users/bananabrann/Reports/January2019.xlsx: No such file or directory
cp: /Users/bananabrann/Reports/March2019.xlsx: No such file or directory
cp: /Users/bananabrann/Reports/June2019.xlsx: No such file or directory
|
:使用 stdout 作为下一个程序的 stdin。
使用左侧程序的标准输出|
作为右侧程序的标准输入。
$ ls -1
buffalo-gap.txt
abilene.txt
clyde.txt
lubbock.txt
$ ls -1 | head -2
buffalo-gap.txt
abilene.txt
可菊花链连接
使用|
,我们最终可以串联任意数量的程序,以达到预期的效果。
在下图中,我们获取grep
程序的标准输出,并将其作为 的标准输入head
及其参数发送。然后,我们将该标准输出发送到 的标准输入tail
,最后将标准输出重定向到 guestlist.txt。
希望这对某些人有所帮助,或者激发某些人的兴趣来尝试这些操作符并自行进一步研究!
编码愉快!🍻
文章来源:https://dev.to/bananabrann/stupid-short-bash-s-2-2-4n1m