Shell 编程语言之重定向和管道 | 青训营笔记

84 阅读1分钟

Shell 作为一门编程语言,具有一系列的语法规则。
本文介绍了其中的重定向管道中基础的内容。
(关于变量运算符的内容,详见 Shell 编程语言之变量和运算符

重定向

重定向是对输出输入重定向。
用于标识输入、输出的符号叫文件描述符,下面是对它的简要介绍。

文件描述符

  • 对于标准输入(stdin)————文件描述符为0,用于接收用户的输入数据
  • 对于标准输出(stdout)————文件描述符为1,用于向屏幕或其它输出设备输出数据
  • 对于标准错误输出(stderr)————文件描述符为2,用于向屏幕或其它输出设备输出错误信息

重定向符号

  • 输入重定向符号:
    • <:比如 $ cat < file.txt 表示将输入设置为 file.txt,并通过 cat 命令输出到标准输出设备(屏幕)上
    • <<:表示继续沿用当前的标准输入,只有识别到指定的标识符后停止,将接收到的内容作为 stdin
  • 输出重定向符号:
    • >:覆盖写入文件,比如 $ls > file.txt 表示将命令的输出重定向到 file.txt 文件中
      • 也可以写作 1>
    • >>:将命令的输出追加到文件末尾,比如 $ echo "hello" >> file.txt 表示将输出加到 file.txt 文件的最后
    • 2>:将错误输出写入文件,比如 ls /no/such/dir 2> error.txt 表示将 ls 命令的错误信息输出到 error.txt 文件中
    • >&:将命令的输出和错误信息输出到同一个文件中
      • 比如,command > output.txt 2>&1

管道

管道的作用是将前一个命令的结果传递给后面的命令

  • 管道符:|
  • 管道的语法注意点:
    1. 管道右侧的命令必须能接受标准输入
      • lsmv 等命令不能直接接受标准输入,需要使用 xargs 进行预处理
    2. 管道命令仅处理 stdout,对于 stderr(错误)会予以忽略
      • 设置不忽略管道错误:set -o pipefail