考虑这样的代码:
echo hello >> log.txt
echo world >> log.txt
我使用标准输出重定向执行命令。是否可以创建粘性重定向?像这样的东西:
redir stdout log.txt
echo hello
echo world
stop-redir
这相当于第一段代码。
我真正需要的是——为 stdout 和 stderr (同时)进行粘性重定向,执行一些命令,停止重定向,并读取日志文件。
答案1
exec 3>&1 4>&2 >log.txt 2>&1
echo hello
echo world
exec 1>&3 2>&4
less log.txt
即:制作文件描述符3和4当前1(stdout)和2(stderr)的副本,将1重定向到log.txt,将2重定向到与1相同的;然后执行命令;然后从文件描述符 3 和 4 中保存的值恢复 stdout 和 stderr。