命令行操作:邏輯運算符、重定向與管道

命令行操作:邏輯運算符、重定向與管道

  • 前言
  • 一、邏輯運算符
        • 1.1. 邏輯運算符 && (AND)
        • 1.2. 邏輯運算符 || (OR)
        • 1.3. 標準文件描述符 (FD)
  • 二、重定向
        • 2.1 重定向: > 與 >>
        • 2.2 重定向錯誤輸出: 2>/ 與 2>>
        • 2.3 POSIX 推薦(經常使用)
  • 三、管道 (順便說明, 與重定向的區別)
  • 結語

前言

??在日常的命令行操作中,我們經常會用到各種邏輯運算符、重定向和管道等高級功能。這些功能不僅能夠提高我們的工作效率,還能幫助我們更好地控制命令的執行流程和輸出結果。本文將詳細講解邏輯運算符(如 && 和 ||)、標準文件描述符(如 stdin、stdout 和 stderr)、重定向操作(如 >、>>、2> 和 2>>)以及管道的使用方法,并通過豐富的示例幫助讀者深入理解這些概念。

一、邏輯運算符

1.1. 邏輯運算符 && (AND)

??邏輯運算符 && 表示“僅當左側命令成功(退出狀態碼為 0)時才執行右側命令”。
示例:

false && echo "成功"
#沒有輸出,因為 false 失敗(退出碼非 0),所以右側不執行
true && echo "成功"
成功
#true 成功(退出碼 0),所以執行 echo

在這里插入圖片描述

1.2. 邏輯運算符 || (OR)

??邏輯運算符 || 表示“僅當左側命令失敗(退出狀態碼非 0)時才執行右側命令”。
示例:

false || echo "左側失敗,執行此處"
#左側失敗,執行此處
true || echo "不會執行"
#沒有輸出,因為 true 成功,右側不執行
#組合注意: A && B || C 從左到右結合,等價于 (A && B) || C。
舉例:
false && echo yes || echo fallback
fallback
#(false && echo yes) 不成立,于是執行 || 后面的 echo fallback

在這里插入圖片描述
在這里插入圖片描述

1.3. 標準文件描述符 (FD)
  • 0 = stdin (標準輸入)
  • 1 = stdout (標準輸出)
  • 2 = stderr (標準錯誤)

示例(分別演示 stdout/stderr):

echo "out"
out  # 到 stdout
echo "err" >&2
err  # 到 stderr
#如果只把 stdout 重定向到文件,但 stderr 不重定向,錯誤仍會顯示在終端:
ls /no/such/path > out.txt
#終端會顯示錯誤信息(stderr),out.txt 為空或不存在

在這里插入圖片描述

二、重定向

2.1 重定向: > 與 >>

含義:

  • > 把 stdout 寫到文件(覆蓋原內容)
  • >> 把 stdout 追加到文件末尾
    示例(覆蓋):
echo "first" > file.txt
echo "second" > file.txt
cat file.txt
second

在這里插入圖片描述

示例(追加):
echo "first" > file.txt
echo "second" >> file.txt
cat file.txt
first
second

在這里插入圖片描述

2.2 重定向錯誤輸出: 2>/ 與 2>>

含義: 把標準錯誤 (fd2) 重定向到文件(覆蓋或追加)。
示例:

ls /no/such/path 2> err.txt
cat err.txt
ls: cannot access '/no/such/path': No such file or directory

在這里插入圖片描述

追加:
ls /no/such/path 2>> err.txt
新的錯誤會追加到 err.txt 后面

在這里插入圖片描述
同時重定向 stdout 與 stderr
有幾種常用寫法(要注意兼容性與順序):

2.3 POSIX 推薦(經常使用)

[命令] > out.txt 2>&1
含義: 先把 stdout 重定向到 out.txt,再把 stderr (2) 重定向到當前 stdout (1) 指向的位置(也就是 out.txt)。結果:stdout 和 stderr 都寫入 out.txt。
示例:

bash -c 'echo out; echo err >&2' > both.txt 2>&1
cat both.txt
out
err

順序很重要,下面是常見坑:
bash -c 'echo out; echo err >&2' 2>&1 > both.txt
??這條會把 stderr 重定向到最初的 stdout (終端),然后再把 stdout 重定向到文件,結果是:錯誤仍打印到終端,而文件里只有 stdout 內容。

Bash 特殊簡寫 (bash/ksh/zsh)
[命令] &> file # 將 stdout 和 stderr 都寫入 file (Bash 特性)
[命令] |& other # 將 stdout + stderr 都送入管道 (bash/zsh 的簡寫)
示例 (&>):

bash -c 'echo out; echo err >&2' &> both.txt
cat both.txt
out err

將輸出丟棄 /dev/null
含義: 把不想要的輸出重定向到 /dev/null (黑洞)。
示例: 只保留 stderr,丟棄 stdout:
[命令] > /dev/null
丟棄 stderr:
[命令]> /dev/null
同時丟棄兩者:
[命令] > /dev/null 2>&1
或 (bash):
[命令] &> /dev/null

三、管道 (順便說明, 與重定向的區別)

??含義: 把前一個命令的 stdout 作為下一個命令的 stdin。默認只傳輸 stdout,不包含 stderr(除非你把 stderr 重定向到 stdout)。
示例:

echo -e "apple\nbanana" | grep banana
banana

如果想把 stderr 也通過管道傳給下一個命令,可以用:
[命令] 2>&1 | grep something
或 (bash):
[命令] |& grep something
例子: 把 stdout 和 stderr 都傳給 grep:
·```bash
bash -c ‘echo out; echo err >&2’ 2>&1 | sed -n ‘p’
out
err

高級: 自定義文件描述符 (常見技巧)
你可以用 exec 打開一個新的 FD,然后向它寫:
示例:
```bash
exec 3 > mylog.txt
echo "hello" >&3
exec 3>&-
cat mylog.txt
hello

(這是可選進階技巧,用于腳本中對多個日志流進行管理)
小結 (快速備忘)

  • &&: 左成功 → 才執行右
  • ||: 左失敗 → 才執行右
  • > 覆蓋 stdout, >> 追加 stdout
  • 2> 和 2>> 用于 stderr
  • 將 stderr 指向 stdout: 2>&1 (順序重要)
  • 同時重定向 stdout + stderr: >file 2>&1 (POSIX),或 &>file (bash)
  • 丟棄輸出: >/dev/null / 2>/dev/null
  • 管道 | 只傳 stdout; 要傳兩者用 2>&1| 或 |& (bash)

結語

??通過本文的詳細講解,相信你已經對命令行操作中的邏輯運算符、標準文件描述符、重定向和管道有了更深入的理解。這些工具和技巧將幫助你在日常的命令行操作中更加高效和靈活地處理各種任務。希望你能將這些知識應用到實際工作中,不斷提升自己的命令行操作能力。Happy coding!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/920470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/920470.shtml
英文地址,請注明出處:http://en.pswp.cn/news/920470.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDA Pro 逆向安卓 SO 庫實戰指南:從靜態分析到動態調試

IDA Pro 逆向安卓 SO 庫是一個系統性的工程。下面我將為你提供一個從環境準備、基礎靜態分析到高級動態調試的完整實戰指南。一、 準備工作與環境搭建 所需工具IDA Pro: 主力逆向工具,建議使用 7.7 或更高版本,對 ARM/ARM64 架構支持更好。目標 APK:…

Python爬蟲(47)Python異步爬蟲與K8S彈性伸縮:構建百萬級并發數據采集引擎

目錄一、背景與行業痛點二、核心技術架構解析2.1 異步爬蟲引擎設計2.2 K8S彈性伸縮架構三、生產環境實踐數據3.1 性能基準測試3.2 成本優化效果四、高級優化技巧4.1 協程級熔斷降級4.2 預測式擴容五、總結🌈Python爬蟲相關文章(推薦)一、背景…

處理器的雙發射是什么?

處理器的雙發射是什么? 這是一個處理器微架構層面的概念,對于理解現代高性能CPU(包括一些Cortex-M7/M55/M85等高端MCU內核)如何提升性能至關重要。 核心摘要 雙發射 是一種處理器設計技術,允許CPU的譯碼器在一個時鐘周期內,同時解碼并派發兩條指令到不同的執行單元中去…

麒麟操作系統掛載NAS服務器

前言:因信創整改,需將原服務器的服務全部遷移到信創服務器,在部署完應用后,發現外掛了NAS服務(可用df -h查看掛載文件),于是在信創服務器上需要掛載NAS服務器。在Linux上掛載NAS服務器可以通過多…

qt配置ros2環境,簡單版本

因為不同的系統環境會有差異,先把我的環境介紹如下: 系統:Ubuntu22.04 ROS版本:ros2 humble Qt版本:qt-5.14.2 要配置Qt中的ros環境,需要在Qt的系統環境中添加2個變量,一個是編譯環境變量、一個…

【基于C# + HALCON的工業視覺系統開發實戰】三十六、PCB焊點缺陷檢測:0漏檢的局部變形匹配技術

摘要:針對PCB焊點檢測中虛焊、錫珠、偏移三大核心缺陷,本文提出基于局部變形匹配與黃金模板的工業級解決方案。系統采用"同軸光源+四向可調支架"的硬件布局消除器件陰影,結合HALCON 24.11的局部變形匹配算法適應PCB熱膨脹形變。通過多尺度模板庫自學習機制實現8秒…

諾基亞無人機網絡(NDN-Nokia Drone Networks):面向工業運營的全自動無人機解決方案

諾基亞無人機網絡(NDN-Nokia Drone Networks):面向工業運營的全自動無人機解決方案諾基亞無人機網絡 (NDN) 是一款先進的全自動無人機一體化解決方案,旨在提升和數字化各種工業和公共安全用例。這款多功能 BVLOS 解決方案基于先進的蜂窩連接,…

OpenTelemetry 在 Spring Boot 項目中的3種集成方式

目錄 1. 自動埋點(Java Agent) 2. 注解驅動(WithSpan) 3. 手動埋點(SDK 編程) 配置關鍵點 方案選擇建議 OpenTelemetry 在 Spring Boot 項目中的應用主要有以下三種方式,按實現復雜度由低到…

nvue文件text標簽 不同樣式的文本在同一段落顯示

參考鏈接&#xff1a;nvue中處理text為塊級元素的替代解決方法_nvue 塊級元素-CSDN博客 實現效果&#xff1a; nvue的text是塊級元素&#xff0c;用上層加粗的絕對定位覆蓋底層的文本實現 <view class"cus-text-area"><!-- nvue的text是塊級元素&#xff0…

STM32的ADC寄存器操作

ADC硬件電路ADC的硬件電路主要由輸入電路&#xff0c;觸發信號電路&#xff0c;數據寄存器電路&#xff0c;中斷電路還有數據總線這及部分構成。輸入信號通道ADC的通道輸入到轉換器&#xff0c;每個ADC有多達18個通道&#xff0c;可測量16個外部和2個內部信號源&#xff0c;溫度…

Java 實現HTML轉Word:從HTML文件與字符串到可編輯Word文檔

在實際開發中&#xff0c;將HTML頁面或內容轉換為Word文檔是一項常見需求。無論是將網頁報表導出為正式文檔&#xff0c;還是將合同、發票等頁面內容生成可編輯的Word文件&#xff0c;這種轉換都能顯著提升文檔的復用性和歸檔價值。然而&#xff0c;HTML與Word在結構和渲染機制…

華為L420國產筆記本(統信UOS桌面專業版1070)安裝openEuler2403虛擬機

本文探討在華為L420國產筆記本&#xff08;操作系統為統信UOS桌面專業版1070&#xff09;中安裝openEuler2403的arm版虛擬機。 一、測試環境 1、硬件設備 華為L420國產筆記本&#xff0c;CPU為華為麒麟9006C&#xff0c;內存16G 2、操作系統 統信UOS桌面專業版1070 二、安…

【STM32】將 FreeRTOS移植到STM32F103RCT6 詳細流程

這篇文章是將 FreeRTOS移植到STM32F103RCT6 詳細流程。創建用于移植的根文件夾&#xff0c;如 FreeRTOS-F103。也可以命名為別的名稱。進入 FreeRTOS-F103 文件夾&#xff0c;在其內創建以下幾個子文件夾&#xff1a;apps&#xff0c;doc&#xff0c;drivers&#xff0c;FreeRT…

京東招java開發

java開發&#xff08;崗位信息經過jobleap.cn授權&#xff0c;可在CSDN發布&#xff09;京東 四川職位描述1、負責企業金融資金、支付基礎支撐相關系統建設&#xff1b; 2、負責重點項目、日常需求的承接&#xff0c;按期保質保量交付&#xff1b; 3、負責系統的日常維護及技術…

文本處理與模型對比:BERT, Prompt, Regex, TF-IDF

1. BERT (Bidirectional Encoder Representations from Transformers) BERT是一種基于Transformer架構的深度雙向預訓練語言模型。它通過在海量文本上進行預訓練&#xff08;如掩碼語言模型任務&#xff09;&#xff0c;學習到豐富的語言表征&#xff0c;并可以通過微調&#x…

流量迷局 - 理解負載均衡(L4/L7)與CDN背后的“隱形路由

《網絡迷蹤:SRE的TCP/IP故障排查藝術》 系列第七篇:流量迷局 - 理解負載均衡(L4/L7)與CDN背后的“隱形路由” “案發現場”: 你在排查一個問題時,讓用戶提供他ping你服務域名的結果。 在北京的用戶,ping app.mycompany.com,顯示的IP地址是 111.222.1.100。 在廣州的用戶…

dagger.js 實現「CSS 機械鍵盤」示例解讀(對比 React 版本)

0) 效果演示 &#xff08;代碼地址&#xff09; CSS Mechanical Keyboard1) 示例與來源 dagger.js 版本&#xff1a;本筆圍繞 CodePen 上的《CSS Mechanical Keyboard》的 dagger.js 改寫版進行解讀&#xff0c;核心思路是用 dagger 指令把純 CSS 藝術包裝成可復用的組件&…

如何檢查 Linux 系統的內存使用情況

內存管理是保持 Linux 系統平穩運行的重要組成部分。無論您是系統管理員、開發者&#xff0c;學會檢查 Linux 內存使用情況是確保系統穩定性和性能的關鍵步驟。本文將介紹在 Linux 環境下監控和檢查內存使用的幾種方法&#xff0c;包括命令行工具&#xff08;如 top、vmstat、p…

我店生活平臺是不是 “圈錢平臺”?揭開消費補貼新模式的面紗

近年來&#xff0c;本地生活服務領域涌現出諸多創新模式&#xff0c;其中“WO店”生活平臺憑借其獨特的全民補貼機制引發行業關注。在“圈錢平臺”質疑聲此起彼伏的背景下&#xff0c;這一模式究竟是商業創新還是資本游戲&#xff1f;本文將從商業模式、風險控制、用戶權益保障…

(LeetCode 每日一題) 1493. 刪掉一個元素以后全為 1 的最長子數組 (雙指針)

題目&#xff1a;1493. 刪掉一個元素以后全為 1 的最長子數組 思路&#xff1a;雙指針&#xff0c;時間復雜度0(n)。 C版本&#xff1a; class Solution { public:int longestSubarray(vector<int>& nums) {int ans0;int left0,cnt0;for(int i0;i<nums.size();i…