linux极简小知识:33、关于重定向符号的介绍🔥`>`、`>>`、`<`、`2>`、`2>>`、`&>`等

1,682 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

各种不同的重定向符(号)

> 右箭头表示输出重定向; < 左箭头表示输入重定向。

  • > 重定向输出到某个位置,替换原有文件的所有内容。比如command > 文件,将标准输出重定向到文件中。

>1> 的简写。

  • >> 重定向追加到某个位置,在原有文件的末尾添加内容。比如command >> 文件,将标准输出重定向追加到文件中。

>>1>> 的简写。

  • < 重定向某个内容作为标准输入到某个位置。比如command < 文件,将文件作为命令的标准输入。

<0< 的简写<<表示追加输入。

  • <<delimiter 通常是一个command<<后,紧挨着写字符,作为分界符,回车写上内容,以相同的分界符结尾,中间的内容就作为command的输入。常见的分界符使用EOF。比如command <<分界符,从标准输入中读入,直到遇到分界符停止

<<表示追加输入。<<0<< 的简写。

  • command < file1 >file2file1 作为命令的标准输入并将标准输出到file2

  • command > file <<delimiter 将分界符内的内容作为命令的标准输入,并将标准输出到file

  • 2> 将错误重定向输出到文件中。

  • 2>> 将错误重定向输出追加到文件末尾。

  • &> 混合输出错误的和正确的信息。将标准输出和错误输出共同重定向到某个位置。

  • &>>command >> file 2>&1 将标准输出和错误输出共同重定向追加到文件。

说明

  1. 箭头的指向就是数据的流向。
  2. 标准输入(英文:stdin):代码为0,使用<或<<。数据流从右向左。
  3. 标准正常输出(英文:stdout):代码为1,使用>或>>。数据流从左向右。
  4. 标准错误输出(英文:stderr):代码为2,使用2>或2>>。数据流从左向右。

一些重定向小示例

读取文件并将文件内容输入重定向到变量

比如,有一个file1.txt文件:

# cat file1.txt
this is a new line has been appended to multiple files

使用输入重定向,将文件内容输入给一个变量

# read content<file1.txt

输出查看变量内容

# echo $content
this is a new line has been appended to multiple files

重定向输出到文件

ls -l命令的结果输出到文件,并查看文件内容。

# ls -l > lstest.txt
# cat lstest.txt
total 40
-rw-r--r-- 1 root root    0 Sep 21 17:57 cat_test.txt
-rw-r--r-- 1 root root 1065 Sep 21 17:32 colortest.sh
-rw-r--r-- 1 root root   55 Sep 21 20:36 file1.txt
-rw-r--r-- 1 root root   55 Sep 21 20:36 file2.txt
-rw-r--r-- 1 root root   55 Sep 21 20:36 file3.txt
-rw-r--r-- 1 root root   42 Sep 21 18:07 file.txt
-rw-r--r-- 1 root root    0 Sep 22 13:49 lstest.txt
-rw-r--r-- 1 root root   42 Sep 21 20:47 mulline.txt
-rw-r--r-- 1 root root    0 Sep 21 17:56 redirect.txt
-rw-r--r-- 1 root root   78 Sep 21 16:09 test1.sh
-rw-r--r-- 1 root root   46 Sep 21 14:38 test1.txt
-rw-r--r-- 1 root root   47 Sep 21 16:01 test.sh
-rw-r--r-- 1 root root   40 Sep 21 14:13 test.txt

错误重定向输出

执行的错误,默认不会重定向输出输出:

# ls -l abc > lstest1.txt
ls: cannot access abc: No such file or directory
# cat lstest1.txt
#

错误输出到文件:

# ls -l abc 2> lstest1.txt
# cat lstest1.txt
ls: cannot access abc: No such file or directory

标准和错误输出都重定追加向到文件

# ls -l abc lstest1.txt
ls: cannot access abc: No such file or directory
-rw-r--r-- 1 root root 49 Sep 22 13:53 lstest1.txt
# cat lstest1.txt
ls: cannot access abc: No such file or directory
# ls -l abc lstest1.txt &>> lstest1.txt
# cat lstest1.txt
ls: cannot access abc: No such file or directory
ls: cannot access abc: No such file or directory
-rw-r--r-- 1 root root 98 Sep 22 13:55 lstest1.txt

command > file1 <<delimiter例子

# cat >>test.txt <<EOF
input new line
EOF
# cat test.txt
input new line