La redirección stderr no funciona en csh

La redirección stderr no funciona en csh

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 chshcomando 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/ttyusar 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

información relacionada