перенаправить STDERR в tcsh из .aliases - PullRequest
4 голосов
/ 26 сентября 2008

в tcsh Я пытаюсь перенаправить STDERR из команды из моего файла .aliases.

Я обнаружил, что могу перенаправить STDERR из командной строки следующим образом. , .

$ (xemacs > /dev/tty) >& /dev/null

. , , но когда я помещаю это в мой файл .aliases, я получаю цикл псевдонимов. , .

$ cat .aliases
alias xemacs '(xemacs > /dev/tty ) >& /dev/null'
$ xemacs &
Alias loop.
$

. , , поэтому я ставлю обратную косую черту перед командой в .aliases, что позволяет запускать команду. , .

$ cat .aliases
alias xemacs '(\xemacs > /dev/tty ) >& /dev/null'
$ xemacs &
[1] 17295
$ 

. , , но теперь я не могу дать команде никаких аргументов:

$ xemacs foo.txt &
Badly placed ()'s.
[1]    Done                          ( \xemacs > /dev/tty ) >& /dev/null
$ 

Может кто-нибудь предложить какие-либо решения? Заранее спасибо!


ОБНОВЛЕНИЕ: мне все еще любопытно, можно ли перенаправить STDERR в tcsh из .aliases, но, как было предложено здесь, я закончил со скриптом оболочки:

#!/bin/sh
# wrapper script to suppress messages sent to STDERR on launch
# from the command line.
/usr/bin/xemacs "$@" 2>/dev/null

Ответы [ 2 ]

5 голосов
/ 26 сентября 2008

Я подозреваю, что это тот случай, когда НЕ использовать псевдоним - лучший вариант - попробуйте вместо этого использовать скрипт оболочки:

#!/bin/tcsh

(xemacs $* > /dev/tty ) >& /dev/null
2 голосов
/ 21 ноября 2008

Попробуйте

alias emacs '(\emacs \!* > /dev/tty) >& /dev/null'

Сообщение "плохо размещено ()" происходит из-за неправильного размещения входного параметра в emacs. Без "\!*" в определении псевдонима "emacs abc" становится

(/usr/bin/emacs > /dev/tty) >& /dev/null abc

С включенным «\!*» «emacs abc» становится

(/usr/bin/emacs abc > /dev/tty) >& /dev/null
...