redirecionamento stderr não está funcionando no csh

8

Eu corro o seguinte comando:

pkg_add emacs-23.4,2.tbz 2> output.log

A saída ainda é exibida no terminal. Quando pressiono , obtenho

pkg_add emacs-23.4,2.tbz 2 > output.log

com um espaço antes do 2 .

Eu originalmente não coloquei isso. Eu tento

pkg_add emacs-23.4,2.tbz > output.log 2>&1

Novamente, quando pressiono , foram adicionados espaços .

Por que isso está acontecendo comigo?

Estou executando o csh no FreeBSD.

    
por gadgetmo 04.04.2012 / 18:24

3 respostas

11

Os 2 > o redirecionamento não funciona com csh ou tcsh.

Use o comando chsh para alterar seu shell para / bin / sh ou / usr / local / bin / bash para usar o redirecionamento de estilo 2> . Nota: Não altere o shell do root para / usr / local / bin / bash

O csh e o tcsh não podem redirecionar o padrão e o erro separadamente, mas >& redirecionará a saída combinada para um arquivo.

    
por 04.04.2012 / 19:20
19

Não tenho certeza se você está tentando ocultar o STDERR ou redirecioná-lo para o STDOUT.

Para redirecionar o STDOUT para um arquivo:

pkg_add emacs-23.4,2.tbz > stdout.log

Para redirecionar STDOUT e STDERR para um arquivo:

pkg_add emacs-23.4,2.tbz > & stdxxx.log

Para redirecionar o STDOUT para um arquivo e ocultar o STDERR:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null

Para redirecionar o STDOUT para consolar e ocultar o STDERR:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null

Para redirecionar STDOUT para o console e STDERR para um arquivo:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log

Para redirecionar STDOUT para um arquivo e STDERR para um arquivo:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log

EDITAR: A razão pela qual isso funciona é que a ação no () 's acontece primeiro; Portanto, se redirecionamos o STDOUT, ele não estará mais disponível fora do () 's. Isso nos deixa com apenas STDERR, e então podemos redirecionar isso conforme desejado.

    
por 04.06.2014 / 01:10
1

Eu sei como fazer isso no Csh, mas usando 2 shells:

csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt

Isso permite redirecionar somente stderr para file.txt, sem stdout - ou seja, o que você queria.

    
por 02.08.2013 / 12:22