4

在 tcsh 中,我试图从我的 .aliases 文件中的命令重定向 STDERR。

我发现我可以像这样从命令行重定向 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
$ 

任何人都可以提供任何解决方案吗?先感谢您!


更新:我仍然很好奇是否可以从 .aliases 重定向 tcsh 中的 STDERR,但正如这里所建议的,我最终得到了一个 shell 脚本:

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

2 回答 2

5

我怀疑这是不使用别名是最佳选择的情况 - 尝试使用 shell 脚本:

#!/bin/tcsh

(xemacs $* > /dev/tty ) >& /dev/null
于 2008-09-25T21:34:59.370 回答
2

尝试

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
于 2008-11-21T02:26:52.770 回答