我想要一个脚本将 stdout 和 stderr 重定向到一个文件,执行一系列操作,然后撤消这些重定向并对文件内容采取操作。我想:
function redirect(){
exec 3>&1
exec 4>&2
exec 1>outfile 2>&1
}
function undirect(){
exec 1>&3
exec 2>&4
}
echo first
redirect
echo something
cat kjkk
undirect
if some_predicate outfile; then echo ERROR; fi
这似乎符合我的要求,但看起来相当复杂。有没有更干净/更清晰的方法来做到这一点?
如果您确实需要来回切换它,而事先不知道什么会在何时何地去往,那么这几乎就是这样做的方法。根据您的要求,隔离需要重定向的部分并将其作为组执行可能会更简洁,如下所示:
echo first
{
echo something
cat kjkk
} 1>outfile 2>&1
if some_predicate outfile; then echo ERROR; fi
the {}
称为组命令,整个组的输出被重定向。如果您愿意,您可以在子 shell 中执行 exec,因为它只影响子 shell。
echo first
(
exec 1>outfile 2>&1
echo something
cat kjkk
)
if some_predicate outfile; then echo ERROR; fi
请注意,我使用了括号()
在这里,而不是大括号{}
(在第一个示例中使用)。
HTH
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)