美文网首页
1.6 玩转文件描述符及重定向

1.6 玩转文件描述符及重定向

作者: 拙言_Coder | 来源:发表于2019-03-05 13:56 被阅读0次

《Linux Shell 脚本攻略(第 2 版)》读书笔记

文件描述符是与某个打开的文件或数据流相关联的整数。文件描述符0 、 1以及2是系统预留的。

  • 0 —— stdin(标准输入)
  • 1 —— stdout(标准输出)
  • 2 —— stderr(标准错误)

将输出文本重新定向或保存到一个文件中

echo "This is a sample text 1" > temp.txt

将文本追加到目标文件中

echo "This is a sample text 2" >> temp.txt

标准错误

当命令输出错误信息时,stderr 信息就会被打印出来。

ls +            # + 是一个非法参数
ls: cannot access +: No such file or directory

成功和不成功的命令

当一个命令发生错误并退回时,它会返回一个非 0 的退出状态;而当命令成功完成后,它会返回数字 0。退出状态可以从特殊变量 $? 中获取(在命令执行后立刻运行 echo $?,就可以打印出退出状态)。

将 stderr 重定向到 out.txt:

ls + 2> out.txt

可以将 stderr 单独重定向到一个文件,将 stdout 重定向到另一个文件:

cmd 2>stderr.txt 1>stdout.txt

还可以将 stderr 转换成 stdout,使得 stderr 和 stdout 都被重定向到同一个文件中:

cmd &> output.txt

舍弃错误信息

cmd 2>/dev/null

既可以将数据重定向到文件,还可以提供一份重定数据的副本作为后续命令的 stdin

下面的代码中,tee 命令接收到来自 stdin 的数据。它将 stdout 的一份副本写入 out.txt,同时将另一份副本作为后续命令的 stdin。命令 cat -n 将从 stdin 中接收到的每一行数据前奖赏行号并写入 stdout:

$ cat a* | tee out.txt | cat -n
cat: a1: Permission denied
     1  a1
     2  a1

注意,tee 只能从 stdin 中读取。

默认情况下,tee 命令会将文件覆盖,但是它提供了一个 -a 选项,用于追加内容

cat a* | tee -a out.txt | cat -n

将文件重定向到命令

cmd < file

将脚本内部的文本进行重定向

#!/bin/bash
cat << EOF > log.txt
LOG FILE HEADER
This is a test log file 
Function: System statistics
EOF

cat <<EOF>log.txt 与下一个 EOF 行之间的所有文本行都会被当做stdin数据。

自定义文件描述符

可以使用 exec 命令创建自己的文件描述符。

  • < 操作符用于从文件中读取值 stdin (只读模式
  • > 操作符用于截断模式的文件写入
  • >> 操作符用于追加模式的文件写入

创建一个文件描述符进行文件读取:

exec 3<input.txt    #创建
cat <&3             #使用

创建一个文件描述符用于写入(截断模式)

exec 4>output.txt
echo newline >&4

创建一个文件描述符用于写入(追加模式)

exec 5>>output.txt
echo appended line >&

相关文章

  • 1.6 玩转文件描述符及重定向

    《Linux Shell 脚本攻略(第 2 版)》读书笔记 文件描述符是与某个打开的文件或数据流相关联的整数。文件...

  • Linux shell 学习笔记(未完成)

    终端打印 命令: 玩转变量和环境变量 数学计算 文件描述符及重定向 数组和关联数组 使用别名 获取日期

  • linux就该这么学-002

    输入输出重定向 标准输入重定向「STDIN, 文件描述符为0」 标准输出重定向「STDOUT, 文件描述符为1」 ...

  • Shell--呈现数据

    文件描述符 用stdout和stderr文件描述符来在多个位置生成输出,重定向相应的文件描述符 临时重定向 在脚本...

  • 基础

    基础 文件描述符和重定向 文件描述符: 0 标准输入 1 标准输出 2 标准错误 重定向 >可以将文本保存到文件中...

  • Linux中文件描述符,重定向与标准输入输出

    Linux中文件描述符,重定向与标准输入输出 文件描述符:内核(kernel)利用文件描述符(file descr...

  • Shell语法(5)--重定向

    重定向 在Linux中,所有输出的目标都是文件,一切皆文件,所以输出的目的地也是一个文件描述符 文件描述符 描述符...

  • 第5次课-Shell脚本语言-第5讲

    内容一:Shell脚本->重定向学习 1、创建文件读写描述符?"<>" 2、关闭文件描述符 3、列举打开的文件描述...

  • 15- Shell脚本基础(三)重定向

    在了解重定向之前,我们先来看看linux 的文件描述符。 linux文件描述符:可以理解为linux跟踪打开文件,...

  • shell文件描述符与重定向

    文件描述符与重定向 1 文件描述1.1 文件描述的输出1.2 实例: 2 自定义描述符2.1 exec 命令创建全...

网友评论

      本文标题:1.6 玩转文件描述符及重定向

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