0. 从终端输入一个命令时,通常会将该命令的结果输出到终端。例如,在终端执行 pwd 命令会在屏幕上显示当前目录:
# pwd /root
大多数 UNIX 系统中,命令通常从一个叫标准输入的地方读取输入。同样,命令通常将其输出写入到标准输出。标准输入和标准输出默认情况下都是终端。
那如果想要更改命令的标准输入和标准输出的地方,就需要使用重定向了。
1. 关于重定向涉及到几个命令:
输出重定向: > 将标准输出重定向到指定位置 >> 将标准输出以追加的方式重定向到指定位置 输入重定向: < 将标准输入重定向到指定位置,即从指定位置输入 << tag 将标准输入重定向到指定内容,即将开始标记 tag 和结束标记 tag 之间的内容作为标准输入
下面用示例说明:
a.>
# echo ---- > output # cat output ---- # echo ++++ > output # cat output ++++
将命令执行的结果用 > 重定向到指定文件时,每次新的命令执行结果都会覆盖文件中的内容。
b.>>
# echo ---- > output # cat output ---- # echo ++++ >> output # cat output ---- ++++
将命令执行的结果用 >> 重定向到指定文件时,每次新的命令执行结果都会追加到文件内容的最后。
c.<
# cat output ---- ++++ # wc -l output 2 output # wc -l < output 2
两次执行 wc 的区别在于:第一次是将output作为文件统计文件的内容行数;第二次是将output看做标准输入,从output中读入内容,然后计算输入内容的行数。
d.<< tag
# wc -l << tag > 1 > 2 > 3 > tag 3
使用 << tag 时,tag需要成对出现,第一个 tag 表示输入开始,第二个 tag 表示输入结束。然后将这段内容作为标准输入。
2. 除上述情况外,还能看到以下情形:
2> 2>& 1 1>& 2
&>
在介绍上述情况之前先了解下什么是标准输入和标准输出。
通常用文件描述符0表示标准输入(STDIN),文件描述符1表示标准输出(STDOUT),文件描述符2表示标准错误输出(STDERR)。
而我们常见的 > 其实和 1> 相同,都是代表了将标准输出重定向。
那么 2> 就代表了将标准错误输出重定向,举例说明:
# ld ld: no input files # ld > true 2> error # cat true # cat error ld: no input files
ld 命令 是需要输入参数的,因为没有输入参数,所以报错。默认情况下是会将标准错误输出输出到终端。在示例中将标准输出和标准错误输出分别重定向至 true 文件和 error 文件。
接着看看 2>& 1:
# ld > true 2>& 1 # cat true ld: no input files
可以看到 2>&1 代表了将标准错误输出重定向至标准输出,也就是两者输出到同一个文件 true 中。
同理,1>&2 代表了将标准输出重定向至标准错误输出。
# echo ---- &> output # cat ouput ---- # ld &> output # cat output ld: no input files
&> 则代表了将标准输出和标准错误输出都重定向到指定位置。
标签:输出,ld,shell,重定向,--,cat,标准,output From: https://www.cnblogs.com/citta/p/17320785.html