![是否可以从 stdout/stderr 创建粘性重定向](https://linux22.com/image/49698/%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BB%8E%20stdout%2Fstderr%20%E5%88%9B%E5%BB%BA%E7%B2%98%E6%80%A7%E9%87%8D%E5%AE%9A%E5%90%91.png)
考虑这样的代码:
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。