【鸟哥 Linux 10.5】数据流重导向
什么是数据流重导向?
-
执行命令的时候会用标准输入读取必需数据,如果程序运行正确,使用标准输出输出结果,如果程序运行错误,使用标准错误输出输出错误。
-
使用数据流重导向去分流不同的数据。
使用数据流重导向来分流不同输出
- 必须使用特殊字符来标识不同的流。
-
标准输入(stdin),代码为0,使用<或者<<
-
标准输出(stdout),代码为1,使用>或者>>(实际上是1>或者1>>,这里的1可以省略)
-
标准错误输出(stderrout),代码为2,使用2>或者2>>
输出重定向的例子
ll / 1>> ~/rootfile # 将ll / 标准输出追加到~/rootfile中
ll / >> ~/rootfile # 将ll / 标准输出追加到~/rootfile中
ll / 2> ~/rootfile # 将ll / 标准错误输出覆盖到~/rootfile中
# 将find /home -name .bashrc 标准输出覆盖到list_right中
# 将find /home -name .bashrc 标准错误输出覆盖到list_error中
find /home -name .bashrc > list_right 2> list_error
# 将多个输出重定向到同一个文件
# 将find / -name .bashrc 标准输出覆盖到list文件中
# 将find / -name .bashrc 标准错误输出重定向到标准输出(1号)中,由于标准输出已经重定向到list中了,所以标准错误输出也会输出到list文件中
find / -name .bashrc 1> list 2>&1
- 上例中2>&1是指将标准错误输出重定向到标准输出,那么当然也可以反过来使用1>&2将标准输出重定向到标准错误输出
/dev/null黑洞文件
- 吃掉所有重定向到文件的数据流
输入的重定向
- 来看一个cat快速创建文件的例子:
# 使用cat来快速建立文件
cat > catfile # 执行之后输入需要写入文件的内容,^d结束
- 以下内容截取自cat命令的manpage
DESCRIPTION
Concatenate FILE(s) to standard output.
With no FILE, or when FILE is -, read standard input.
- 当cat不接收文件的时候,会接收stdin作为输出,将这些输出重定向到catfile中,相当于通过键盘输入快速创建了一个文本文件。
- 再来看一个例子:
#使用文件来快速创建相同内容的文件
cat > catfile < ~/.bashrc
- 以上脚本表达了以下意思:
- cat的标准输出被重定向到catfile中
- cat的标准输入被重定向到~/.bashrc中
- 综合来说,cat接收~/.bashrc的文件内容作为输入,并将内容输出到catfile中。
- 最后一个例子:
# 通过<<指定文件结束符
cat > catfile << "eof" # 这下不需要^d了,输完所有内容,输入一个eof即可结束
命令执行的逻辑分隔符
指令 | 说明 |
---|---|
cmd1 && cmd2 | cmd1执行正确,才执行cmd2 |
cmd1 | | cmd2 |
cmd1;cmd2 | cmd1和cmd2无关联的执行 |
- 需要注意的是,上述指令执行正确与否的判断都是根据$?这个回传值来的