bash: Redirecionar IO, mas não com sufixos

1

normalmente eu uso XX 2>error.log , mas para fins de depuração, eu prefiro a seguinte sintaxe:

function XX()
{
    redirect_io_to "error.log"
}

Existe tal sintaxe disponível?

É conveniente porque eu configurei o meu VIM para comentar / descomentar uma linha com alguma tecla de atalho, eu poderia facilmente comentar isto / descomentar.

    
por daisy 11.06.2012 / 15:54

2 respostas

4

Sim, mas não é muito bonito.

Você pode fazer exec 2> error.log para enviar stderr para um arquivo

O problema é que agora você precisa limpá-lo e restaurar stderr , portanto, na parte inferior da função, você precisa fazer exec 2>&1 , o que faz com que stderr volte ao terminal novamente.

function XX()
{
    exec 2> error.log
    foo bar
    exec 2>&1
}

O exec 2>&1 não faz mal deixar, então você pode apenas comentar e descomentar o primeiro exec .

Como alternativa, você pode fazer com que toda a função seja executada em um subshell para que os redirecionamentos sejam limpos automaticamente (os parênteses no exemplo abaixo iniciam um subshell).

function XX()
{ (
    exec 2> error.log
    foo bar
) }

Por fim, você pode criar uma definição de alias que possa comentar e descomentar facilmente e apenas colocá-la logo antes da declaração da função.

alias XX='XX 2> error.log'
function XX()
{
    foo bar
}
    
por 12.06.2012 / 01:03
0

Não, mas você sempre pode empilhar tudo o que precisa em um bloco:

function XX() {
 (
  some
  commands
  here
 ) 2>error.log
}
    
por 11.06.2012 / 17:08