版权声明:本文为博主hanchao5272原创文章,转载请注明来源,并留下原文链接地址,谢谢! https://blog.csdn.net/hanchao5272/article/details/86562008
系列目录与参考文献传送门: shell入门学习笔记-序章
输入/输出重定向
输出重定向至文件
admindeMacBook-Pro:myshell admin$ echo LookAtMe > look.txt
admindeMacBook-Pro:myshell admin$ cat look.txt
LookAtMe
admindeMacBook-Pro:myshell admin$ echo ImOK > look.txt
admindeMacBook-Pro:myshell admin$ cat look.txt
ImOK
admindeMacBook-Pro:myshell admin$ who >> look.txt
admindeMacBook-Pro:myshell admin$ cat look.txt
ImOK
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
>
覆盖,>>
追加。
输入重定向至文件
admindeMacBook-Pro:myshell admin$ cat look.txt
ImOK
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
admindeMacBook-Pro:myshell admin$ wc -l look.txt
5 look.txt
admindeMacBook-Pro:myshell admin$ wc -l look.txt #文件内容行数
5 look.txt
admindeMacBook-Pro:myshell admin$ wc -l < look.txt
5
admindeMacBook-Pro:myshell admin$ cat < look.txt > at.txt
admindeMacBook-Pro:myshell admin$ cat at.txt
ImOK
admin console Jan 4 14:07
admin ttys000 Jan 4 14:07
admin ttys001 Jan 7 17:52
admin ttys002 Jan 7 18:05
wc -l
查看文件行数wc -l < look.txt
不同于wc -l look.txt
,因其输入源于look.txt
文件内容,并不知道其文件名,所以结果只有行数,而没有文件名。cat < look.txt > at.txt
:以look.txt
文件内容为输入源进行cat
,然后将cat
结果输出值at.txt
文件。
重定向深入理解
-
一般情况下,每个Unix/Linux命令运行时,都会打开三个文件:
- 标准输入文件
stdin
:stdin
的文件描述符为0,Unix/Linux默认从stdin
读取数据。 - 标准输出文件
stdout
:stdout
的文件描述符为1,Unix/Linux默认向stdout
输出数据。 - 标准错误文件
stderr
:stderr
的文件描述符为2,Unix/Linux默认向stderr
中写入错误信息。
- 标准输入文件
-
默认情况下,
cmd < file
将stdin
重定向至file
,cmd > file
将stdout
重定向至file
。
admindeMacBook-Pro:myshell admin$ cat h.txt > hhh.txt
cat: h.txt: No such file or directory
admindeMacBook-Pro:myshell admin$ cat hhh.txt
admindeMacBook-Pro:myshell admin$ cat h.txt > hhh.txt 2>&1
admindeMacBook-Pro:myshell admin$ cat hhh.txt
cat: h.txt: No such file or directory
- 默认情况下,
stderr
不进行重定向,所以可直接看到错误信息。 cat h.txt > hhh.txt 2>&1
: 将stderr
与stdout
合并后重定向至hhh.txt
。
Here Document
admindeMacBook-Pro:myshell admin$ wc -l << EOF
> 1111
> 222
> 33
> EOF
3
admindeMacBook-Pro:myshell admin$ wc -l < EOF
-bash: EOF: No such file or directory
-
格式:
cmd << delimiter document document ... delimiter
-
结束的delimiter必须顶格写,且后面不能追加任何内容。
-
必须用
<<
/dev/null
admindeMacBook-Pro:myshell admin$ cat h.txt > hhh.txt
cat: h.txt: No such file or directory
admindeMacBook-Pro:myshell admin$ cat h.txt > /dev/null 2>&1
admindeMacBook-Pro:myshell admin$
/dev/null
是一个特殊文件,写入其中的内容都会被丢弃,无法从其得到任何内容。/dev/null
可以起到禁止输出
的效果。