从.aliases重定向tcsh中的STDERR
时间:2020-03-06 14:45:04 来源:igfitidea点击:
在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
解决方案
我怀疑这是不使用别名的最佳选择,请尝试使用Shell脚本代替:
#!/bin/tcsh (xemacs $* > /dev/tty ) >& /dev/null
尝试
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