什么时候需要重定向
- 窗口输出的内容很重要,需要将它保存下来的时候;
- 后台执行的程序不希望他干扰窗口正常的输出结果时;
- 一些系统命令的执行结果,希望他可以保存下来时;
- 某些命令可能已知会有某些错误信息时,可以使用「2> /dev/null」将其丢弃;
- 错误信息与正确信息需要分别输出时。
输出「>,>>」
当在命令窗口中执行命令之后,结果信息或错误信息就会显示在窗口中,这就是标准输出(stdout)或标准错误输出(stderr)。标准输出的默认输出位置都是命令窗口,有时候为了保存输出结果或让输出结果直接输入到文件中,此时就需要使用到重定向功能。
名称 | 代码 | 符号 |
---|---|---|
标准输出(stdout) | 1 | >或>> |
标准错误输出(stderr) | 2 | 2>或2>> |
其中,>与>>的区别是,前者是覆盖写入,后者是追加写入。
示例:
# 当我们执行`ls`命令查看当前文件夹中的内容时,都会有标准输出将结果显示在命令窗口中。
$ ls
file
# 但当我们使用了流重定向将标准输出的内容重定向到文件中后,命令窗口中就没有显示之前的结果了
$ ls > result
# 此时查看result文件中的内容,发现其中包含了ls命令的执行结果,并且result的文件是先创建,然后再执行ls命令的,因此ls命令看到有两个文件
$ cat result
file
result
# 再次执行
$ ls > result
# 发现结果仍然是相同的
$ cat result
file
result
# 更换为追加重定向
$ ls >> result
# 再次查看时发现输出到result文件中的结果是追加的形式了
$ cat result
file
result
file
result
# 将标准输出和标准错误输出都重定向到同一个文件中
$ ls > result 2>&1
$ ls &> result
# 丢弃输出结果,此时输出的结果不会显示,也不会输出到文件中,/dev/null会将所有信息都吃掉
$ ls > /dev/null
输入「<,<<」
将标准的键盘输入修改为由文件内容输入。
名称 | 代码 | 符号 |
---|---|---|
标准输入(stdin) | 0 | <或<< |
示例1:
# 创建文件,由键盘输入内容,输入完成后[ctrl]+d退出输入
$ cat > catfile
testing
cat file test
# 查看文件内容
$ cat catfile
testing
cat file test
# 使用输入重定向,创建新文件catfile.bak,内容从catfile中输入
$ cat > catfile.bak < catfile
# 查看catfile.bak文件,内容与catfile完全相同
$ cat catfile.bak
testing
cat file test
实例2:
# <<重定向,表示一个输入终止符,当输入遇到此字符时便会退出输入
$ cat > catfile << end
heredoc> endless
heredoc> eend
heredoc> end ss
heredoc> end
# dddd
$ cat catfile
endless
eend
end ss