下一页 上一页 目录

3. 关于重定向的一切

3.1 理论和快速参考

有 3 个文件描述符,stdin、stdout 和 stderr (std=standard,标准)。

基本上你可以

  1. 将 stdout 重定向到一个文件
  2. 将 stderr 重定向到一个文件
  3. 将 stdout 重定向到 stderr
  4. 将 stderr 重定向到 stdout
  5. 将 stderr 和 stdout 重定向到一个文件
  6. 将 stderr 和 stdout 重定向到 stdout
  7. 将 stderr 和 stdout 重定向到 stderr
1 “代表” stdout,2 代表 stderr。

关于查看这些内容的小提示:使用 less 命令,你可以查看 stdout (它会保留在缓冲区中) 和 stderr,stderr 会打印在屏幕上,但在你尝试“浏览”缓冲区时会被清除。

3.2 示例:stdout 重定向到文件

这将会使程序的输出写入到一个文件。

        ls -l > ls-l.txt
        
在这里,将创建一个名为 'ls-l.txt' 的文件,它将包含你输入命令 'ls -l' 并执行后在屏幕上看到的内容。

3.3 示例:stderr 重定向到文件

这将会使程序的 stderr 输出写入到一个文件。

        grep da * 2> grep-errors.txt
        
在这里,将创建一个名为 'grep-errors.txt' 的文件,它将包含你看到的 'grep da *' 命令输出的 stderr 部分。

3.4 示例:stdout 重定向到 stderr

这将会使程序的 stdout 输出被写入到 stderr。

        grep da * 1>&2 
        
在这里,命令的 stdout 部分被发送到 stderr,你可能会通过不同方式观察到这一点。

3.5 示例:stderr 重定向到 stdout

这将会使程序的 stdout 输出被写入到 stderr。

        grep * 2>&1
        
在这里,命令的 stderr 部分被发送到 stdout。如果你通过管道传递给 less 命令,你会看到通常会“消失”(因为它们被写入 stderr)的行现在被保留了(因为它们在 stdout 上)。

3.6 示例:stderr 和 stdout 重定向到文件

这会将程序的所有输出都放到一个文件中。这有时适用于 cron 条目,如果你希望命令以完全静默的方式运行。

        rm -f $(find / -name core) &> /dev/null 
        
这(考虑到 cron 条目)将删除任何目录中名为 'core' 的所有文件。请注意,如果你要清除其输出,你应该非常确定命令正在做什么。
下一页 上一页 目录