Shell
管道与重定向
-
管道与管道符
- 管道也是进程通信的方式之一
- 管道符 “|”,将前一个命令执行的结果传递给后面的命令
- ps | cat
- echo 123 | ps
- 管道符两边若是外部命令,则会建立子进程。若是使用内部命令,建议将命令封装在脚本之内再去执行。若无必要,避免在管道符内使用内部命令。
-
子进程与子shell
- 子Shell是由父Shell创建的进程,父Shell创建子Shell调用的是fork函数。
- 内建命令不创建子Shell而外部命令创建子Shell。
- 冒号用法:冒号可以表示永真(相当于TRUE关键字)如while :;do...done(while循环的条件始终为真);其次冒号可以清空一个文件,:>log将冒号重定向到文件,log文件内容被清空,所 以:>命名是常用的清空文件的命令;接着冒号最重要的用法是:不做任何事,只做参数展开。
- 圆括号结构,能强制将其中的命令运行在子shell中
- 子进程与子shell详解
-
重定向符号
- 一个进程默认会打开标准输入、标准输出、错误输出三个文件描述符
- 输入重定向符号 "<"
- read var < /path/to/a/file
- 输出重定向符号
- ">" 清空文件后再进行输入
- ">>" 文件保持不变,在末尾追加输入
- “2>” 将错误的信息进行输出到指定文件
- “&>” 无论正确或错误的信息,都输出到指定文件;将stderr转换成stdout,使stderr和stdout都被重定向到同一个文件中
- 例:$ cmd > alloutput.txt 2>&1 或者 $ cmd &> out.txt
- 输入和输出重定向组合使用
- cat > /path/a/file << EOF
- I am #USER
- EOF
-
文件描述符
- 0 —— stdin 标准输入
- 1 —— stdout 标准输出
- 2 —— stderr 标准错误