Shell

2>&-、2>/dev/null、|&、&>/dev/null 和 >/dev/null 2>&1 之間的區別

  • May 2, 2020

只是尋找之間的區別

  • 2>&-
  • 2>/dev/null
  • |&
  • &>/dev/null
  • >/dev/null 2>&1

以及它們與非 Bourne shell(如tcsh,mksh等)的可移植性。

背景:

  • 數字1 = 標準輸出(即 STDOUT)
  • 數字2 = 標準錯誤(即 STDERR)
  • 如果沒有明確給出數字,則shell (bash) 假定數字 1

首先讓我們解決這些功能。有關參考,請參閱Advanced Bash-Scripting Guide

職能

2>&-

這個的一般形式是M>&-,其中**“M”是文件描述符編號。這將關閉所引用的任何文件描述符的輸出,即“M”**。

2>/dev/null

這個的一般形式是M>/dev/null,其中**“M”是文件描述符編號。這會將文件描述符“M”**重定向到/dev/null.

2>&1

這個的一般形式是M>&N,其中**“M”“N”是文件描述符編號。它將文件描述符“M”“N”**的輸出組合成一個流。

|&

這只是 的縮寫2>&1 |。它是在 Bash 4 中添加的。

&>/dev/null

這只是 的縮寫>/dev/null 2>&1。它將文件描述符 2 (STDERR) 和描述符 1 (STDOUT) 重定向到/dev/null.

>/dev/null

這只是 的縮寫1>/dev/null。它將文件描述符 1 (STDOUT) 重定向到/dev/null.

可移植到非 bash、tcsh、mksh 等。

我對cshand之外的其他 shell 處理的不多tcsh。與 bash 的重定向運算符相比,我對這 2 個的經驗是 bash 在這方面更勝一籌。有關更多詳細資訊,請參見tcsh 手冊頁

csh/tcsh 直接支持您詢問的命令中的任何一個。您必須使用不同的語法來構造類似的函式。

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