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


我的Java學習日記
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
索引(index)能提升搜尋比對資料時的效能
為何要重寫equals方法? 為何要重寫hashCode方法?
兩種方式進行物件比較,使用Comparator或使用Comparable
併發,多個事情在同一時間段內同時發生 並行,多個事情在同一個時間點上同時發生
Map是由Key-Value所組成的 而Key的部分不能重複,因為是Set
Set 是繼承 Collection API的一個子接口 interface 唯一的限制是不允許重覆的物件存在 所以當不想有相同的物件出現,就可以選擇用Set
索引(index)能提升搜尋比對資料時的效能
為何要重寫equals方法? 為何要重寫hashCode方法?
兩種方式進行物件比較,使用Comparator或使用Comparable
併發,多個事情在同一時間段內同時發生 並行,多個事情在同一個時間點上同時發生
Map是由Key-Value所組成的 而Key的部分不能重複,因為是Set
Set 是繼承 Collection API的一個子接口 interface 唯一的限制是不允許重覆的物件存在 所以當不想有相同的物件出現,就可以選擇用Set
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
Lua 開檔寫檔的運用 io.output()...
※ 同步概念: 單純地「由上而下」執行程式碼,而且一次只執行一件事,也就是「按順序執行,一個動作結束才能切換到下一個」。缺點是你需要「等待」事情執行完畢,才能繼續往下走。 ※ 非同步概念: 盡可能讓主要的執行程序不需要停下來等待,若遇到要等待的事情,就發起一個「非同步處理」,讓主程序繼續執行,
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
前年第一次藉公司機會,參加了DevOpsDay的活動。雖然devOps一詞各自表述,大多狀況還是偏向維運會遇到的技術為主,做為平時開發、跟使用者訪談需求的工作內容來說,參加聚會如果沒有一定的知識,對講者所提到的狀況比較難有共鳴...
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
“所有人寫的程式會變成指令 每一道指令是由CPU執行 而CPU所能理解的指令類型有限”
Thumbnail
Lua 開檔寫檔的運用 io.output()...
※ 同步概念: 單純地「由上而下」執行程式碼,而且一次只執行一件事,也就是「按順序執行,一個動作結束才能切換到下一個」。缺點是你需要「等待」事情執行完畢,才能繼續往下走。 ※ 非同步概念: 盡可能讓主要的執行程序不需要停下來等待,若遇到要等待的事情,就發起一個「非同步處理」,讓主程序繼續執行,
Thumbnail
<iostream> ​在之前的文章有提到過,<iostream> 是專門處理程式的輸入 (input) 以及輸出 (output) 的函式庫。輸入輸出的對象是以電腦作為主角: 輸入指的是「把資料給電腦」,輸出指的是「從電腦那邊取得資料」。 在這個系列的文章中,程式輸入指的都是從鍵盤輸入資料給電
Thumbnail
前年第一次藉公司機會,參加了DevOpsDay的活動。雖然devOps一詞各自表述,大多狀況還是偏向維運會遇到的技術為主,做為平時開發、跟使用者訪談需求的工作內容來說,參加聚會如果沒有一定的知識,對講者所提到的狀況比較難有共鳴...
Thumbnail
確保沒有遺漏或錯誤 程式的完整資訊資料對於程式設計至關重要。這是因為只有透過完整的資訊,我們才能確保在程式設計中沒有任何遺漏或錯誤。最終,後台管理扮演著管理系統中所有動作和行為是否符合特定標準的重要角色。 採取不符合預期的行動 這種符合性的重要性在於,當我們設計程式時,希望使用者按照預期的方式