Command-Line

stderr 重定向在 csh 中不起作用

  • November 13, 2021

我執行以下命令:

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。

2> 重定向不適用於 csh 或 tcsh。

使用該chsh命令將您的 shell 更改為 /bin/sh 或 /usr/local/bin/bash 以使用2>樣式重定向。**注意:**不要將 root 的 shell 更改為 /usr/local/bin/bash

csh 和 tcsh 不能分別重定向標準輸出和錯誤,但>&會將組合輸出重定向到文件。

我不確定您是要隱藏 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,然後我們可以根據需要重定向它。

引用自:https://unix.stackexchange.com/questions/35715