小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
各种不同的重定向符(号)
>
右箭头表示输出重定向; <
左箭头表示输入重定向。
>
重定向输出到某个位置,替换原有文件的所有内容。比如command > 文件
,将标准输出重定向到文件中。
>
是1>
的简写。
>>
重定向追加到某个位置,在原有文件的末尾添加内容。比如command >> 文件
,将标准输出重定向追加到文件中。
>>
是1>>
的简写。
<
重定向某个内容作为标准输入到某个位置。比如command < 文件
,将文件作为命令的标准输入。
<
是0<
的简写。<<
表示追加输入。
<<delimiter
通常是一个command<<
后,紧挨着写字符,作为分界符,回车写上内容,以相同的分界符结尾,中间的内容就作为command
的输入。常见的分界符使用EOF。比如command <<分界符
,从标准输入中读入,直到遇到分界符停止
<<
表示追加输入。<<
是0<<
的简写。
-
command < file1 >file2
将file1
作为命令的标准输入并将标准输出到file2
。 -
command > file <<delimiter
将分界符内的内容作为命令
的标准输入,并将标准输出到file
。 -
2>
将错误重定向输出到文件中。 -
2>>
将错误重定向输出追加到文件末尾。 -
&>
混合输出错误的和正确的信息。将标准输出和错误输出共同重定向到某个位置。 -
&>>
或command >> file 2>&1
将标准输出和错误输出共同重定向追加到文件。
说明
- 箭头的指向就是数据的流向。
- 标准输入(英文:stdin):代码为0,使用<或<<。数据流从右向左。
- 标准正常输出(英文:stdout):代码为1,使用>或>>。数据流从左向右。
- 标准错误输出(英文: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