在tcsh中从.aliases重定向标准错误输出(STDERR)

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
2个回答

5

我认为在这种情况下最好不要使用别名,而是尝试使用shell脚本:

#!/bin/tcsh

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

2

尝试

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

“badly placed ()'s”这个错误信息是由于将输入参数放错了位置导致的。如果在别名定义中没有使用“\!*”,那么“emacs abc”就会变成
(/usr/bin/emacs > /dev/tty) >& /dev/null abc

在"\!*"被加入的情况下,"emacs abc"变成了:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接