通常我使用XX 2>error.log
,但出于调试目的,我更喜欢以下语法:
function XX()
{
redirect_io_to "error.log"
}
有这样的语法可用吗?
这很方便,因为我设置我的 VIM 用一些快捷键来注释/取消注释一行,我可以轻松地注释掉/取消注释它。
答案1
是的,但它并不是很漂亮。
您可以exec 2> error.log
发送stderr
到文件
问题是你现在必须清理它并恢复stderr
,所以你必须在函数的底部执行exec 2>&1
,这使得stderr
再次返回到终端。
function XX()
{
exec 2> error.log
foo bar
exec 2>&1
}
exec 2>&1
留下来也没什么坏处,所以你可以直接评论和取消评论第一个exec
。
或者,您可以使整个函数在子 shell 中执行,以便自动清除重定向(下面示例中的括号启动子 shell)。
function XX()
{ (
exec 2> error.log
foo bar
) }
最后,您可以创建一个可以轻松注释和取消注释的别名定义,并将其放在函数声明之前。
alias XX='XX 2> error.log'
function XX()
{
foo bar
}
答案2
不,但您始终可以将所需的所有内容堆叠在一个块中:
function XX() {
(
some
commands
here
) 2>error.log
}