stderr 重定向在 csh 中不起作用

gad*_*tmo 13 command-line freebsd io-redirection csh

我运行以下命令:

pkg_add emacs-23.4,2.tbz 2> output.log
Run Code Online (Sandbox Code Playgroud)

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

pkg_add emacs-23.4,2.tbz 2 > output.log
Run Code Online (Sandbox Code Playgroud)

前有一个空格2

我原来没有放这个。我试试

pkg_add emacs-23.4,2.tbz > output.log 2>&1
Run Code Online (Sandbox Code Playgroud)

同样,当我按下 时?空格已添加

为什么这会发生在我身上?

我在 FreeBSD 上运行 csh。

nik*_*ikc 20

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

要将 STDOUT 重定向到文件:

pkg_add emacs-23.4,2.tbz > stdout.log
Run Code Online (Sandbox Code Playgroud)

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

pkg_add emacs-23.4,2.tbz > & stdxxx.log
Run Code Online (Sandbox Code Playgroud)

要将 STDOUT 重定向到文件并隐藏 STDERR:

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & /dev/null
Run Code Online (Sandbox Code Playgroud)

要将 STDOUT 重定向到控制台并隐藏 STDERR:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & /dev/null
Run Code Online (Sandbox Code Playgroud)

要将 STDOUT 重定向到控制台并将 STDERR 重定向到文件:

( pkg_add emacs-23.4,2.tbz > /dev/tty ) > & stderr.log
Run Code Online (Sandbox Code Playgroud)

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

( pkg_add emacs-23.4,2.tbz > stdout.log ) > & stderr.log
Run Code Online (Sandbox Code Playgroud)

编辑:这样做的原因是 () 中的动作首先发生;因此,如果我们重定向了 STDOUT,那么它在 () 之外将不再可用。这让我们只剩下 STDERR,然后我们可以根据需要重定向它。


Cra*_*aig 13

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

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

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