Ejecuto el siguiente comando:
pkg_add emacs-23.4,2.tbz 2> output.log
La salida aún se muestra en la terminal. Cuando presiono ↑, aparece
pkg_add emacs-23.4,2.tbz 2 > output.log
con un espacio antes del2
.
Originalmente no puse esto. lo intento
pkg_add emacs-23.4,2.tbz > output.log 2>&1
De nuevo, cuando presiono ↑,se han agregado espacios.
¿Por qué me está pasando esto?
Estoy ejecutando csh en FreeBSD.
Respuesta1
No estoy seguro si estás intentando ocultar STDERR o redirigirlo a STDOUT.
Para redirigir STDOUT a un archivo:
pkg_add emacs-23.4,2.tbz > stdout.log
Para redirigir STDOUT y STDERR a un archivo:
pkg_add emacs-23.4,2.tbz > & stdxxx.log
Para redirigir STDOUT a un archivo y ocultar STDERR:
( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null
Para redirigir STDOUT a la consola y ocultar STDERR:
( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null
Para redirigir STDOUT a la consola y STDERR a un archivo:
( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log
Para redirigir STDOUT a un archivo y STDERR a un archivo:
( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log
EDITAR: La razón por la que esto funciona es que la acción en () ocurre primero; Ergo, si hemos redirigido STDOUT, ya no estará disponible fuera de (). Esto nos deja solo con STDERR, y luego podemos redirigirlo como deseemos.
Respuesta2
La redirección 2> no funciona con csh o tcsh.
Utilice el chsh
comando para cambiar su shell a /bin/sh o /usr/local/bin/bash para utilizar el 2>
estilo de redirección.Nota:No cambie el shell de root a /usr/local/bin/bash
csh y tcsh no pueden redirigir la salida estándar y el error por separado, pero >&
redirigirán la salida combinada a un archivo.
Respuesta3
Sé cómo hacerlo en Csh, pero usando 2 shells:
csh -c 'SOME_COMMAND 1>/dev/null' |& tee file.txt
De esta manera se permite redirigirsolostderr a file.txt, sin stdout, es decir, lo que quería.
Respuesta4
Con respecto a la respuesta de nikc, para lograr el mismo comportamiento de los shells Bourne, en lugar de /dev/tty
usar un FIFO.
Para redirigir STDOUT a la consola y ocultar STDERR:
mkfifo stdout
( pkg install -y emacs > stdout ) >& /dev/null & cat stdout
Para redirigir STDERR a la consola y ocultar STDOUT:
pkg install -y emacs > /dev/null