Shell 作为一门编程语言,具有一系列的语法规则。
本文介绍了其中的重定向和管道中基础的内容。
(关于变量和运算符的内容,详见 Shell 编程语言之变量和运算符)
重定向
重定向是对输出和输入重定向。
用于标识输入、输出的符号叫文件描述符,下面是对它的简要介绍。
文件描述符
- 对于标准输入(stdin)————文件描述符为0,用于接收用户的输入数据
- 对于标准输出(stdout)————文件描述符为1,用于向屏幕或其它输出设备输出数据
- 对于标准错误输出(stderr)————文件描述符为2,用于向屏幕或其它输出设备输出错误信息
重定向符号
- 输入重定向符号:
<:比如$ cat < file.txt表示将输入设置为file.txt,并通过cat命令输出到标准输出设备(屏幕)上<<:表示继续沿用当前的标准输入,只有识别到指定的标识符后停止,将接收到的内容作为 stdin
- 输出重定向符号:
>:覆盖写入文件,比如$ls > file.txt表示将命令的输出重定向到file.txt文件中- 也可以写作
1>
- 也可以写作
>>:将命令的输出追加到文件末尾,比如$ echo "hello" >> file.txt表示将输出加到file.txt文件的最后2>:将错误输出写入文件,比如ls /no/such/dir 2> error.txt表示将ls命令的错误信息输出到error.txt文件中>&:将命令的输出和错误信息输出到同一个文件中- 比如,
command > output.txt 2>&1
- 比如,
管道
管道的作用是将前一个命令的结果传递给后面的命令
- 管道符:
| - 管道的语法注意点:
- 管道右侧的命令必须能接受标准输入
ls、mv等命令不能直接接受标准输入,需要使用xargs进行预处理
- 管道命令仅处理 stdout,对于 stderr(错误)会予以忽略
- 设置不忽略管道错误:
set -o pipefail
- 设置不忽略管道错误:
- 管道右侧的命令必须能接受标准输入