Eu executo o seguinte comando:
pkg_add emacs-23.4,2.tbz 2> output.log
A saída ainda é exibida no terminal. Quando pressiono ↑, recebo
pkg_add emacs-23.4,2.tbz 2 > output.log
com um espaço antes do2
.
Eu não coloquei isso originalmente. eu tento
pkg_add emacs-23.4,2.tbz > output.log 2>&1
Novamente, quando pressiono ↑,espaços foram adicionados.
Por que isto está acontecendo comigo?
Estou executando o csh no FreeBSD.
Responder1
Não tenho certeza se você está tentando ocultar o STDERR ou redirecioná-lo para STDOUT.
Para redirecionar 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 STDOUT para um arquivo e ocultar STDERR:
( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null
Para redirecionar STDOUT para console e ocultar STDERR:
( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null
Para redirecionar STDOUT para 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
EDIT: A razão pela qual isso funciona é que a ação em () acontece primeiro; Portanto, se redirecionarmos STDOUT, ele não estará mais disponível fora de (). Isso nos deixa apenas com STDERR, e então podemos redirecioná-lo conforme desejado.
Responder2
O redirecionamento 2> não funciona com csh ou tcsh.
Use o chsh
comando para alterar seu shell para /bin/sh ou /usr/local/bin/bash para usar o 2>
redirecionamento de estilo.Observação:Não altere o shell do root para /usr/local/bin/bash
csh e tcsh não podem redirecionar saída padrão e erro separadamente, mas >&
redirecionarão a saída combinada para um arquivo.
Responder3
Eu sei fazer isso em Csh, mas usando 2 shells:
csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt
Tal forma permite redirecionarapenasstderr para file.txt, sem stdout - ou seja, o que você queria.
Responder4
Em relação à resposta do nikc, para obter o mesmo comportamento dos shells Bourne, em vez de /dev/tty
, use um FIFO.
Para redirecionar STDOUT para console e ocultar STDERR:
mkfifo stdout
( pkg install -y emacs > stdout ) >& /dev/null & cat stdout
Para redirecionar STDERR para console e ocultar STDOUT:
pkg install -y emacs > /dev/null