重定向指的是改变程序运行的输入来源和输出地点。
重定向标准输出
cat file | sort 1 > sort.out
cat file | sort >sort.out #这两个命令等同
pwd >> path.out #追加
nullfile.txt #如果想创建一个长度为0的空文件,可以用' > f i l e n a m e ':
重定向标准输入
- eg1:
sort < file
将file的内容输入到sort进行排序,排序后的结果sort命令输出
sort < name.txt > name.out
- eg2:分隔符用法 —表示结合cat命令从标准输入输入内容到指定文件,遇到指定内容结束输入操作
重定向标准错误
eg:$ grep "trident" missiles 2>/dev/null
在这个例子中,grep命令在文件missiles 中搜索trident字符串,如果出错,错误信息会重定向到/dev/null。
结合使用标准输出和标准错误
eg:$ cat account_qtr.doc account_end.doc 1>accounts.out 2>accounts.err
脚本/命令的正常输出和错误信息重定向到不同的文件中。
eg: grep “standard” standard.txt >grep.out 2>&1
脚本/命令的正常输出和错误信息都重定向到同一个文件中。
注意:shell是从左至右分析相应的命令
exec和文件描述符在一起
exec命令可以用来代替当前shell;换句话说,并没有启动子shell,使用这一命令时,任何现有环境都将被清除,并重新启动一个shell。
exec command
command通常是一个shell脚本。测试执行完该命令后,需要重新登录shell,然后export声明的变量都失效了。
exec命令对文件描述符进行操作时,它不会覆盖你的当前的shell。
#!/bin/bash
exec 3<&0 0<name.txt
read line1
read line2
exec 0<&3
echo $line1
echo $line2
实现文件描述符3缓存标准输入(文件描述符为0),然后将指定文件重定向到标准输入,在操作完指定文件以后,再从缓存文件(3)恢复标准输入。