stderr重定向在csh中不起作用


11

我运行以下命令:

pkg_add emacs-23.4,2.tbz 2> output.log

输出仍显示在终端中。当我按时,我得到

pkg_add emacs-23.4,2.tbz 2 > output.log

在...前面有一个空格2

我本来没有提出。我尝试

pkg_add emacs-23.4,2.tbz > output.log 2>&1

同样,当我按时已经添加了空格

为什么这发生在我身上?

我在FreeBSD上运行csh。

Answers:


12

2>重定向不适用于csh或tcsh。

使用chsh命令将您的shell更改为/ bin / sh或/ usr / local / bin / bash以便使用2>样式重定向。注意:请勿将root用户的shell更改为/ usr / local / bin / bash

csh和tcsh不能分别重定向标准输出和错误,但是>&会将组合的输出重定向到文件。


+1和✔。我使用更改了外壳sh
gadgetmo 2012年

1
@Craig他pkg_add在FreeBSD 上运行,所以我假设这是针对root用户的(/ bin / csh是FreeBSD上root的默认设置)。在这种情况下,你应该不会改变外壳到/ usr / local / bin目录/ bash的。/ bin / sh是可以接受的。您也可以在以root用户身份登录后仅切换到另一个shell。
James O'Gorman '04年

@ JamesO'Gorman好的,我更新了答案。
克雷格2012年

20

我不确定您是要隐藏STDERR还是将其重定向到STDOUT。

要将STDOUT重定向到文件:

pkg_add emacs-23.4,2.tbz > stdout.log

要将STDOUT和STDERR重定向到文件:

pkg_add emacs-23.4,2.tbz > & stdxxx.log

要将STDOUT重定向到文件并隐藏STDERR,请执行以下操作:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null

要将STDOUT重定向到控制台并隐藏STDERR,请执行以下操作:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null

要将STDOUT重定向到控制台,将STDERR重定向到文件,请执行以下操作:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log

要将STDOUT重定向到文件,将STDERR重定向到文件,请执行以下操作:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log

编辑:之所以可行,是因为()中的动作先发生;抱歉,如果我们重定向了STDOUT,则它将在()之外不再可用。这样就只剩下STDERR,然后我们可以根据需要重定向它。


嗨@nikc,欢迎来到unix.SE。您的评论是有用和有益的。我建议编辑您的答案并将其包括在其中,这样就不会那么容易错过。
DRS

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.