redirigir STDERR en tcsh desde .aliases
-
02-07-2019 - |
Pregunta
en tcsh estoy intentando redireccionar STDERR desde un comando desde mi archivo .aliases.
Encontré que puedo redireccionar STDERR desde la línea de comandos de esta manera. . .
$ (xemacs > /dev/tty) >& /dev/null
. . . pero cuando pongo esto en mi archivo .aliases obtengo un bucle de alias. . .
$ cat .aliases
alias xemacs '(xemacs > /dev/tty ) >& /dev/null'
$ xemacs &
Alias loop.
$
. . . así que puse una barra invertida antes del comando en .aliases, lo que permite que se ejecute el comando. . .
$ cat .aliases
alias xemacs '(\xemacs > /dev/tty ) >& /dev/null'
$ xemacs &
[1] 17295
$
. . . pero ahora no puedo dar ningún argumento al comando:
$ xemacs foo.txt &
Badly placed ()'s.
[1] Done ( \xemacs > /dev/tty ) >& /dev/null
$
¿Alguien puede ofrecer alguna solución? ¡Gracias de antemano!
ACTUALIZACIÓN: Sigo sintiendo curiosidad por la posibilidad de redireccionar STDERR en tcsh desde .aliases, pero como se sugirió aquí, terminé con un script de shell:
#!/bin/sh
# wrapper script to suppress messages sent to STDERR on launch
# from the command line.
/usr/bin/xemacs "$@" 2>/dev/null
Solución
Sospecho que este es un caso en el que NO usar un alias es la mejor opción; intente usar un script de shell en su lugar:
#!/bin/tcsh
(xemacs $* > /dev/tty ) >& /dev/null
Otros consejos
Probar
alias emacs '(\emacs \!* > /dev/tty) >& /dev/null'
Las " mal colocadas () 's " el mensaje proviene de la ubicación incorrecta del parámetro de entrada en emacs. Sin el " \! *
" en la definición de alias, " emacs abc
" se convierte en
(/usr/bin/emacs > /dev/tty) >& /dev/null abc
Con el " \! *
" incluido, " emacs abc
" se convierte en
(/usr/bin/emacs abc > /dev/tty) >& /dev/null