• 管道与管道符
    • 管道和信号一样,也是进程通信的方式之一
    • 匿名管道(管道符)是Shell 编程经常用到的通信工具
    • 管道符是 “|”,将前一个命名执行的结果传递给后面的命名
      • ps | cat
      • echo 123 | ps
    • 使用管道符尽量规避内建命令
      • 使用管道符,就会创建一个父进程管理创建多个子进程进行管理,其中一个使用内建命令(例如:cd pwd),并不会改变父进程的环境状态
  • 子进程与子shell
  • 重定向符号
    • 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
    • 输入重定向符号 “<” 代替键盘输入
      • read var < /path/to/a
    • 输出重定向符号 “>” “>>” “2>” “&>”
      • “>”: 清空后再输出到文件
      • “>>”: 追加输出到文件尾部
      • “2>”: 错误重定向 输出到文件(产生错误才会输出)
      • “&>”: 无论错误和正确的信息都输出到文件
      • echo 123 > /path/to/a
    • 输入和输出重定向组合使用
      • cat > /path/to/a/file << EOF
      • I am &USER
      • EOFchrome
  • 歪门邪道
    • 配合 < 可以利用远程写入来执行命令

    • 仅在成功时隐藏 shell 命令的输出

      #!/bin/sh
      
      set -e
      
      SILENT_LOG=/tmp/silent_log_$$.txt
      trap "/bin/rm -f $SILENT_LOG" EXIT
      
      function report_and_exit {
          cat "${SILENT_LOG}";
          echo "\\033[91mError running command.\\033[39m"
          exit 1;
      }
      
      function silent {
          $* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit;
      }
      
      silent mkdir -v pepe
      silent mkdir -v pepe2
      silent mkdir -v pepe
      silent mkdir -v pepe2