在 Linux 中,总有 3 个默认的设备文件是打开的,即标准输入 stdin(键盘)、标准输出 stdout(屏幕)和标准错误 stderr(输出到屏幕的错误信息)。这 3 个文件和其他任何打开的文件,都可以被重定向。重定向简单地说就是从文件、命令、程序、脚本,甚至是脚本中的代码块获取输出并把它作为输入发送到另一个文件、命令、程序或脚本。
每个打开的文件被指定一个描述符。比如,标准输入、标准输出和标准错误的文件描述符即分别是 0、1 和 2。对于打开的另外的文件,这里余留了文件描述符 3~9。
文件重定向
文件重定向是更改一个文件描述符以指向一个文件。
操作符 “>” 开始一个输出重定向。重定向默认只适用于一条命令。当 Bash 运行命令时,它告诉 Bash,标准输出(stdout)应当指向一个文件,而不是它之前指向的地方。
这个重定向只对它应用于的单个命令有效。再此之后执行的其他命令将继续把它们的输出发送到脚本的标准输出位置。
一个简单的示例:
#! /bin/bash
if [ $# -lt 1 ]; then
echo "Usage: $0 DIRECTORY..."
exit
fi
# 遍历在命令行中给脚本指定的所有参数
for dir in $@
do
find $dir -name "*.tmp" -exec rm -f {} \;
done 2> errors.log
保留文件先前内容
使用双重重定向操作符“>>”。“>>”将不会清空文件,它将只是添加新的内容到文件末尾。
因此,对上面的例子进行修改:
#! /bin/bash
if [ $# -lt 1 ]; then
echo "Usage: $0 DIRECTORY..."
exit
fi
# 遍历在命令行中给脚本指定的所有参数
for dir in $@
do
find $dir -name "*.tmp" -exec rm -f {} \;
done 2>> errors.log
本文参考自 《Linux Shell命令行及脚本编程实例详解 》
网友评论