美文网首页Shell 脚本成长笔记
Shell 重定向(一):文件重定向

Shell 重定向(一):文件重定向

作者: 赵者也 | 来源:发表于2017-05-18 08:11 被阅读20次

    在 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命令行及脚本编程实例详解

    相关文章

      网友评论

        本文标题:Shell 重定向(一):文件重定向

        本文链接:https://www.haomeiwen.com/subject/cpkjxxtx.html