从.aliases重定向tcsh中的STDERR

时间:2008-09-25 21:22:19

标签: tcsh

在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 个答案:

答案 0 :(得分:5)

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

#!/bin/tcsh

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

答案 1 :(得分: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