1) 重定向错误:
> >> 不能重定向 STDERR ,使用 2> 2>> 进行错误重定向
2) 同时重定向 STDOUT 、 STDERR :
xxx 1>a.txt 2>a.txt
或 xxx &>a.txt
或 xxx >& a.txt
3) 重定向到文件描述符:
使用 & :
>&n
eg: >&2 重定向到 STDERR
4) 脚本中永久重定向:
exec 1>t.txt
exec 1>>t.txt # 追加需要使用 >>
exec 0<t.txt
重定向符号两侧不要有空格
脚本可同时打开 9 个文件描述符,可自定义的为 3 ~ 8
exec 3>t.txt
echo "abc" >&3 # 输出到 t.txt
5) 描述符的存储与恢复:
exec 4>&1 # 存储 1 到 4
exec 1>a.txt # 将 1
echo "bbbb" # 将输出到 a.txt
exec 1>&4 # 恢复 1
echo "aaaa">&1 # 将输出到 STDOUT
类似地:
exec 4<&0 # 存储 0 到 4
exec 0<a.in # 重定向输入
exec 0<&4 # 恢复 STDIN
6) 可读可写的文件描述符:
exec 3<>a.txt #3 可同时用于输入输出
exec 3>&- # 关闭 3
eg:
exec 4>&1
echo "bbbb">&4 # 将输出到 STDOUT
exec 4>&-
echo "aaaa">&4 # 将报错
7) 对整个函数的输出重定向
可以直接在函数调用后加重定向
8) 附录:
lsof, view all fd in the linux system
lsof -p PID, view all fd of a PID