bash:重定向 IO ,但不带后缀

bash:重定向 IO ,但不带后缀

通常我使用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
}

相关内容