無法在 FreeBsd 中重定向輸出

無法在 FreeBsd 中重定向輸出

在 Freebsd 系統上,我執行 bash 腳本並嘗試重新導向輸出:

% sudo bash some_file.sh arg1 >/dev/null  2>&1
Ambiguous output redirect.


% sudo bash some_file.sh arg1 &> /dev/null
Invalid null command.

答案1

似乎您在命令列上使用了 csh (使用 進行檢查echo $SHELL)。

  • 使用 csh 語法重新導向 stdout 和 stderr 將會是:sudo bash some_file.sh arg1 >& /dev/null
  • 或將重定向移到命令的“bash 部分”sudo bash -c 'some_file.sh arg1 >/dev/null 2>&1'

答案2

您已經很接近了,但是這兩種語法都不是 TENEX C shell 的正確語法。

請記住:除非您進行了更改,否則您在 FreeBSD 上使用的互動式登入 shell 是 TENEX C shell。指令的重定向sudo必須使用 TENEX C shell 的重定向語法。您是否透過 運行 Bourne Again shell 並不重要sudo。這只是確定的重定向發生並sudo已運行後

這:

% sudo bash some_file.sh arg1 >/dev/null 2>&1
實際上等同於

% >/dev/null >&1 sudo bash some_file.sh arg1 2
它嘗試將標準輸出兩次重定向到兩個不同的位置。

這:

% sudo bash some_file.sh arg1 &> /dev/null
實際上是

% sudo bash some_file.sh arg1 & > /dev/null
並將在您的命令歷史記錄中被重寫。它是由 , 連接的兩個命令&sudo以及一個沒有名稱和參數的命令。 TENEX C shell 中不允許後者。

以下是將標準輸出和標準錯誤重新導向到/dev/nullTENEX C shell 的方法:

% sudo bash some_file.sh arg1 >& /dev/null

相關內容