shell|重定向> >>与标准输入、标准输出、标准错误输出

当linux执行一个程序的时候,会自动打开三个流,标准输入*(standard input),标准输出(standard output),标准错误输出(standard error)*,比如在打开命令行时,默认情况下,命令行的标准输入连接到键盘,标准输出和标准错误都连接到屏幕,尽管三个流都打开,但他会根据需要使用。
重定向 > > 可以改变文本流的方向,指定输出目的地。(覆盖)
例子:
输入命令

ls > aa.txt

解释:
改变ls命令用来显示内容的容器,默认容器是屏幕,现将容器改为aa.txt
执行结果:
打开aa.txt可看到所有ls命令的显示内容
「注意」:
  • 若aa.txt是一个不存在文件,重定向时计算机会新建一个aa.txt文件,并将命令行的标准输出指向这个文件。
  • 若aa.txt是一个已存在文件,重定向时会覆盖原aa.txt文件中的内容。
样例:
  1. echo ok > a.txt
    解释:echo的作用是将文本流导向标准输出
    执行结果:ok写入a.txt中
  2. cat < a.txt
    解释:将cat标准输入只想a.txt,文本会从文件流到cat,然后输出到屏幕上
    执行结果:同cat a.txt
  3. cat < a.txt > b.txt
    解释:a.txt中内容复制到了b.txt中
  4. cat > a.txt < b.txt
    解释:b.txt中内容复制到了a.txt中
>& &表示等同于的意思
例子:
假设void是一个不存在的目录,当我们执行
cd void > a.txt

屏幕出现错误提示
bash: cd: void: No such file or directory

当我们执行
cd void >& a.txt

错误信息被导向a.txt
【shell|重定向> >>与标准输入、标准输出、标准错误输出】样例:
cd void 2 > a.txt > b.txt

解释:标准错误对应的总是2,所有有以上写法。标准错误输出到a.txt,标准输出输出到b.txt
追加 >> >>可以改变文本流的方向,指定输出目的地。(追加)
例子:
cat a.txt >> b.txt

将cat a.txt命令的标准输出指向b.txt文件
执行结果:
打开b.txt可看到a.txt的内容被添加到原b.txt内容后面
「注意」:
  • 若b.txt是一个不存在文件,重定向时计算机会新建一个b.txt文件,并将命令行的标准输出指向这个文件。
  • 若b.txt文件已存在,重定向时会追加到原b.txt中内容后面,不覆盖。
样例:
  1. 做输入分隔符
    分隔符可以是任意字符。
cat > a.txt << end

? 当执行cat > a.txt << end,命令并没有结束,cat命令在等待你给他输入数据,当我们敲入end后,cat命令才结束。end之前输入的字符都被写到a.txt文件中,这就是输入分隔符的作用。
高级用法
  1. >/dev/null 这条命令的作用是将标准输出1重定向到/dev/null中。 /dev/null代表linux的空设备文件,所有王这个文件里写入的内容都会丢失,俗称“黑洞”。执行此命令后,标准输出就会不再存在,没有任何地方能找到输出的内容。
  2. 2>&1 这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,也就是错误输出会和标准输出输出到同一个地方。
  3. >/dev/null 2>&1 VS 2>&1 >/dev/null 从左到右地来分析2>&1 >/dev/null
    2>&1,将错误输出绑定到标准输出上。由于此时的标准输出是默认值,也就是输出到屏幕,所以错误输出会输出到屏幕。
    >/dev/null,将标准输出1重定向到/dev/null中。
    我们用一个表格来更好地说明这两条命令的区别:
    命令 标准输出 错误输出
    >/dev/null 2>&1 丢弃 丢弃
    2>&1 > /dev/null 丢弃 屏幕

    推荐阅读