标准输入输出及管道
执行一个 Shell 命令行时通常会自动打开三个标准文件,即标准输入文件(stdin),通常对应终端的键盘;标准输出文件(stdout)和标准错误输出文件(stderr),这两个文件都对应终端的屏幕。进程将从标准输入文件中得到输入数据,将正常输出数据输出到标准输出文件,而将错误信息送到标准错误文件中。
标准输入与输出
- stdin:标准输入,通常对应终端键盘
- stdout:标准输出,通常对应终端屏幕
- stderr:标准错误输出,也对应终端屏幕
在一次shell的输入中,我们可能得到正确的或者错误的结果,而在不做任何处理的情况下,stdout和stderr都会输出到终端屏幕上
如:
~ ls
test.txt # 正确的由命令执行后进行的标准输出
~ aaa
zsh: command not found: aaa # 错误的由终端进行的标准输出
标准输入及其重定向
进行完全的标准输入:cat命令一般后面跟文件名,然后输出其中的内容,但是如果不跟文件,则会直接进入索要输入的状态,并且输入一句就输出一句。
~ cat
aaa
aaa
bbb
bbb
实际上可以看做,本身命令就需要键盘的标准输入,来根据输入做一些输出的操作。
但是标准输入可以由<
和<<
来重定向:
-
<:重定向至文件输入,如
wc < /etc/passwd # wc表示统计输入的行数、字符等
-
<<:here文档,当场编辑文档,用指定分隔符表示文档的结束。(但是不咋用,略过,用到再查)
标准输出及其重定向
上文提到,无论是stdout还是stderr都是默认输出到终端的,而这些内容可以被重定向到文件中。
ls ~/hhhh > hhhh_dir.txt # 如果输入到的文件中有内容,则会被覆盖重写
ls ~/xxxx 2> xxxx_dir.txt # 2>是指将错误输出stderr放到制定文件中
echo mysql==5.7 >> requirements.txt # >>将内容追加到文件的末尾,而不会覆写
&> # 将正确和错误的输出同时放到一个文件中
管道
管道符号|
,可以用来讲一个命令的输出直接输入到另一个命令中。
如:ls /usr/bin|grep python
,即ls命令原本该输出的所有bin目录下的文件和目录名,但是通过管道,这些输入呗grep命令筛选了一遍,只展示内部含有python的。
那么有这么一个需求:
统计一个文件目录下的文件个数,则就可以利用管道,将两条命令结合起来:
ls /usr/bin|wc -w
命令替换
cmd1 `cmd2`
# cmd2的输出将作为cmd1的参数,进行执行
标签:文件,输出,输入输出,标准,管道,ls,输入,终端
From: https://www.cnblogs.com/Leethon-lizhilog/p/17439888.html