9.Shell 输入输出重定向
在Shell脚本中,输入/输出重定向是非常强大的功能,它允许你控制命令的输入来源和输出目标。这可以通过一系列符号来实现,包括 >, <, >>, 2>, &>, | 等。
文件描述符 0 通常是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)
1.标准输出重定向 (> 和 >>)
>:将命令的标准输出(stdout)重定向到一个文件。如果文件已存在,则覆盖该文件。>>:将命令的标准输出追加到一个文件中。如果文件不存在,则会创建新文件。
echo "Hello, World!" > output.txt # 创建或覆盖output.txt,并写入"Hello, World!"
echo "Another line." >> output.txt # 追加一行到output.txt
2.标准错误重定向 (2>, 2>>)
2>:将命令的标准错误(stderr)重定向到一个文件。如果文件已存在,则覆盖该文件。2>>:将命令的标准错误追加到一个文件中。如果文件不存在,则会创建新文件。
ls /nonexistent_directory 2> error.log # 将错误信息写入error.log
ls /nonexistent_directory 2>> error.log # 追加错误信息到error.log
3.同时重定向标准输出和标准错误
&>或>&:将命令的标准输出和标准错误同时重定向到同一个文件。使用&>时,如果文件已存在则覆盖;使用>&通常用于追加模式。&>>:将命令的标准输出和标准错误同时追加到同一个文件中。
ls /nonexistent_directory &> all_output.log # 覆盖all_output.log
ls /nonexistent_directory &>> all_output.log # 追加到all_output.log
4.输入重定向 (<)
<:从文件中读取内容作为命令的输入。
sort < input.txt # 对input.txt中的行进行排序
5.管道 (|)
|:管道操作符用来连接两个命令,前一个命令的输出作为后一个命令的输入。
cat file.txt | grep "pattern" # 在file.txt中搜索包含"pattern"的行
6.其他高级重定向
n>&m:将文件描述符n重定向到文件描述符m。例如,2>&1表示将标准错误重定向到与标准输出相同的位置。n<&m:类似于上面的操作,但方向相反,即将文件描述符m的内容复制给文件描述符n。
command 2>&1 # 将标准错误重定向到标准输出
command 2>&1 | tee logfile # 将标准输出和标准错误同时显示在终端并记录到logfile