2>&1 > /dev/null 與/dev/null 2>&1的差異

更新於 發佈於 閱讀時間約 3 分鐘

核心概念

  • stderr (描述符 2)stdout (描述符 1) 是獨立的檔案描述符。
  • 重定向的順序是關鍵,因為每個重定向會即時生效,並影響之後的指令。


範例

分析 ls /etc/nonexistent 2>&1 > /dev/null 的執行過程

步驟 1:2>&1

  • 2>&1 表示將 stderr 重定向到 stdout當前位置
  • 在執行這一部分時:
    • stdout 此時仍然指向終端(因為尚未被重定向)。
    • 所以,stderr 也被重定向到終端。


步驟 2:> /dev/null

  • > /dev/null(相當於 1> /dev/null)表示將 stdout 重定向到 /dev/null
  • 此時:
    • stdout 被重定向到 /dev/null。
    • stderr 仍然指向終端,因為它已在第一步中跟隨了 stdout 的舊位置(終端)


總結結果

  • stdout 的輸出被丟棄到 /dev/null
  • stderr 的輸出仍然顯示在終端


對比 ls /etc/nonexistent > /dev/null 2>&1

步驟 1:> /dev/null

  • > /dev/nullstdout 重定向到 /dev/null
  • 此時:
    • stdout 指向 /dev/null。
    • stderr 仍然指向終端。


步驟 2:2>&1

  • 2>&1stderr 跟隨 stdout當前位置
  • 由於此時 stdout 已指向 /dev/null,所以:
    • stderr 也被重定向到 /dev/null


關鍵點:順序影響重定向目標

  1. 在 2>&1 執行時,stderr 跟隨的是 stdout 的當前位置
    • 如果 stdout 還指向終端,stderr 就會跟隨到終端。
    • 如果 stdout 已被重定向到 /dev/null,stderr 就會跟隨到 /dev/null。
  2. 每個重定向都是即時生效的,不會回溯修改之前的重定向目標。


圖解

raw-image


留言
avatar-img
留言分享你的想法!
avatar-img
Genos's Coding Diary的沙龍
6會員
19內容數
我的Java學習日記
2023/11/08
索引(index)能提升搜尋比對資料時的效能
2023/11/08
索引(index)能提升搜尋比對資料時的效能
2023/10/03
為何要重寫equals方法? 為何要重寫hashCode方法?
2023/10/03
為何要重寫equals方法? 為何要重寫hashCode方法?
2023/09/27
兩種方式進行物件比較,使用Comparator或使用Comparable
2023/09/27
兩種方式進行物件比較,使用Comparator或使用Comparable
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
由於一個微電腦系統之輸出入裝置通常不只一個,若CPU欲針對某個輸出入裝置做資料讀寫,必須通過不同的位址來選擇不同的裝置,依微電腦的架構區分,定義I/O位址的方法有兩種,記憶體映射 I/O和隔離式 I/O。 本章節將會詳細介紹兩者。
Thumbnail
由於一個微電腦系統之輸出入裝置通常不只一個,若CPU欲針對某個輸出入裝置做資料讀寫,必須通過不同的位址來選擇不同的裝置,依微電腦的架構區分,定義I/O位址的方法有兩種,記憶體映射 I/O和隔離式 I/O。 本章節將會詳細介紹兩者。
Thumbnail
檔案屬性 filetype(string):回傳參數檔案的種類字串,可能的回傳值有:fifo、char、dir、block、link、file和unknown,如果有錯誤回傳false。 fileatime(string):回傳參數檔案的最後存取時間,單位是UNIX的時間戳記,如果錯誤回傳fal
Thumbnail
檔案屬性 filetype(string):回傳參數檔案的種類字串,可能的回傳值有:fifo、char、dir、block、link、file和unknown,如果有錯誤回傳false。 fileatime(string):回傳參數檔案的最後存取時間,單位是UNIX的時間戳記,如果錯誤回傳fal
Thumbnail
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
Thumbnail
路徑處理 basename(string [.string]):回傳第一個參數路徑字串的檔案名稱,包含副檔案,如果有第二個參數字串,就會在檔案名稱刪除此字串,例如:刪除副檔名".php"。 dirname(string):回傳參數路徑字串中的路徑。 realpath(string):回傳參數路
Thumbnail
NodeJS 學習來到 file systems 操作,在文檔操作上有分為同步跟異步的處理,接下來分階段介紹操作函數
Thumbnail
NodeJS 學習來到 file systems 操作,在文檔操作上有分為同步跟異步的處理,接下來分階段介紹操作函數
Thumbnail
要計算字串的 MD5 checksum,在 Shell 下用這樣的指令應該就可以了 但是,它怎麼跟 PHP 的 md5 函數算出來的不同!! 雖然是不同的程式語言,但同樣的字串,用同樣的演算法,應該都相同呀!
Thumbnail
要計算字串的 MD5 checksum,在 Shell 下用這樣的指令應該就可以了 但是,它怎麼跟 PHP 的 md5 函數算出來的不同!! 雖然是不同的程式語言,但同樣的字串,用同樣的演算法,應該都相同呀!
Thumbnail
sed 指令 ( 取代 , 截取行 ) 删除文件第一行: sed -i ‘1d’ filename 删除文件最后一行: sed -i ‘$d’ fileName 刪除首行空白 sed ‘s/^[ \t]*//g’ 參考 : https://codertw.com/前端開發/393321/ 在檔案最後
Thumbnail
sed 指令 ( 取代 , 截取行 ) 删除文件第一行: sed -i ‘1d’ filename 删除文件最后一行: sed -i ‘$d’ fileName 刪除首行空白 sed ‘s/^[ \t]*//g’ 參考 : https://codertw.com/前端開發/393321/ 在檔案最後
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News