shell入门学习笔记-10-输入/输出文件重定向

版权声明:本文为博主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 < filestdin重定向至filecmd > filestdout重定向至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: 将stderrstdout合并后重定向至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可以起到禁止输出的效果。

猜你喜欢

转载自blog.csdn.net/hanchao5272/article/details/86562008