bash的特性-命令和文件自動補全

一、前言

在 Linux Shell 編程和日常使用中,Bash 的自動補全功能 是一個非常強大且實用的特性。它不僅可以節省輸入時間,還能有效減少拼寫錯誤,提升命令執行效率。

本文將帶你全面了解 Bash 的自動補全機制,包括:

? 命令自動補全
? 文件路徑自動補全
? 自定義命令補全規則
? 使用 bash-completion 擴展補全功能
? 實用技巧與快捷鍵
? 實戰案例:為自定義腳本添加補全支持
? 常見問題與解決方案

并通過完整示例幫助你快速掌握 Bash 自動補全的使用與配置。

二、什么是 Bash 自動補全?

Bash 自動補全(Tab Completion) 是 Bash Shell 提供的一項功能,允許用戶在輸入命令、路徑、參數等內容時,通過按下 Tab 鍵自動補全剩余部分。

它極大地提升了命令行的使用效率,尤其在處理長文件名、復雜命令或路徑時非常實用。

三、Bash 自動補全的類型

類型描述示例
命令補全補全可執行命令名git<Tab>?→?git commit
文件/目錄補全補全當前路徑下的文件名cat fil<Tab>?→?cat filename.txt
參數補全補全命令支持的選項ls --<Tab>?→?--help,?--version
自定義補全用戶自定義補全規則mycmd<Tab>?→ 自定義選項

四、基本使用方法

? 1. 命令自動補全

$ gi<Tab>

如果系統中有 git 命令,按下 Tab 后會自動補全為:

$ git

如果存在多個匹配項(如 gitgimp),再按一次 Tab 將列出所有匹配項。

? 2. 文件/目錄自動補全

$ cat fil<Tab>

如果當前目錄下有 filename.txt,則會補全為:

$ cat filename.txt

? 3. 參數自動補全(需安裝 bash-completion)

$ ls --<Tab>

將列出所有支持的選項,如:

--all       --block-size  --color     --help     --reverse

五、啟用 bash-completion 擴展功能

默認情況下,Bash 只支持基本的命令和文件補全。要啟用更高級的參數補全功能(如 --help--version 等),需要安裝并啟用 bash-completion 包。

? 安裝方法(以 Ubuntu/Debian 為例):

sudo apt update
sudo apt install bash-completion

然后在 ~/.bashrc 中添加以下內容以啟用補全:

if [ -f /etc/bash_completion ]; then. /etc/bash_completion
fi

最后刷新配置:

source ~/.bashrc

六、自定義命令補全規則

你可以使用 complete 命令為自定義腳本或命令添加自動補全規則。

? 示例:為?mycmd?命令添加補全選項

假設你有一個腳本 /usr/local/bin/mycmd,支持以下參數:

start | stop | restart | status

你可以為其添加自動補全規則:

complete -W "start stop restart status" mycmd

現在輸入:

$ mycmd s<Tab>

將自動補全為:

start  status

? 示例:為?myscript.sh?添加文件補全

complete -f myscript.sh

這樣在輸入:

$ myscript.sh fil<Tab>

將自動補全當前目錄下的文件名。

七、常用快捷鍵與技巧

快捷鍵功能說明
Tab單次補全補全當前可識別的最長匹配
Tab Tab列出所有匹配項顯示所有可能的補全結果
Ctrl + x Ctrl + e編輯當前命令行進入編輯模式修改命令
Alt + /擴展路徑補全遞歸向上補全路徑
Esc *展開通配符將?*?替換為所有匹配文件名

八、實戰案例:為自定義腳本添加智能補全

📌 需求背景:

你編寫了一個腳本 deploy.sh,支持以下參數:

--env dev | prod
--action build | deploy | rollback

希望在輸入時支持自動補全。

? 實現步驟:

  • 編寫補全函數:
_deploy_completion() {local cur prev optsCOMPREPLY=()cur="${COMP_WORDS[COMP_CWORD]}"prev="${COMP_WORDS[COMP_CWORD-1]}"case "${prev}" in--env)COMPREPLY=( $(compgen -W "dev prod" -- ${cur}) )return 0;;--action)COMPREPLY=( $(compgen -W "build deploy rollback" -- ${cur}) )return 0;;*)opts="--env --action"COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )return 0;;esac
}
  • 注冊補全函數:
complete -F _deploy_completion deploy.sh
  • 使用方式:
$ deploy.sh --env <Tab>
dev  prod$ deploy.sh --action <Tab>
build  deploy  rollback

九、常見問題與解決方案

問題原因解決方案
按 Tab 無反應未安裝 bash-completion安裝并啟用 bash-completion
補全不準確未定義補全規則使用?complete?或編寫補全函數
多次 Tab 不顯示列表配置問題檢查?~/.inputrc?或使用?set show-all-if-ambiguous on
補全顯示亂碼編碼問題設置?LANG=en_US.UTF-8?等環境變量
補全函數未生效未 source 或函數錯誤檢查語法并重新 source

十、總結對比表:Bash 自動補全功能一覽

特性支持說明
命令補全?自動補全可執行命令
文件補全?自動補全當前目錄文件
參數補全?(需 bash-completion)補全命令支持的選項
自定義補全?使用?complete?或函數定義
路徑遞歸補全?(需 Alt+/)支持多級路徑自動補全
通配符展開?(需 Esc *)展開通配符為具體文件名

十一、結語

感謝您的閱讀!如果你有任何疑問或想要分享的經驗,請在評論區留言交流!

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

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

相關文章

Ubuntu系統 系統盤和數據盤擴容具體操作

Linux磁盤配置和需求&#xff0c;以下是完整的操作方案&#xff1a; 可以看到系統盤vda3 還有48GB 數據盤則是還有512GB沒有掛載使用&#xff0c;下面是完成數據擴容的具體操作 一、完成系統盤擴容&#xff08;使用98GB空間&#xff09; # 1. 擴展邏輯卷&#xff08;LVM架構&am…

從0到1學Pandas(七):Pandas 在機器學習中的應用

目錄一、數據預處理1.1 特征提取1.2 數據標準化與歸一化1.3 特征編碼二、特征工程2.1 特征選擇?2.2 特征組合與衍生?2.3 缺失值處理策略?三、模型訓練與評估3.1 數據集劃分3.2 模型訓練與預測3.3 模型評估與調優四、Pipeline 構建4.1 自動化工作流4.2 模型部署與應用4.3 模型…

LangChain和LangGraph 里面的 `create_react_agent`有什么不同

這兩個函數雖然名稱相同&#xff0c;但來自不同的庫&#xff08;LangChain 和 LangGraph&#xff09;&#xff0c;它們在實現和使用上有一些關鍵區別&#xff1a; 主要區別特性LangChain 的 create_react_agentLangGraph 的 create_react_agent所屬庫LangChainLangGraph設計目的…

PostgreSQL 與 Oracle 數據庫字段類型的詳細對比

一、數值類型對比數據類型OraclePostgreSQL說明整數NUMBER(p,0)SMALLINT/INT/BIGINTOracle 統一用 NUMBER&#xff0c;PG 區分精度范圍浮點數BINARY_FLOATREAL單精度浮點雙精度浮點BINARY_DOUBLEDOUBLE PRECISION雙精度浮點高精度小數NUMBER(p,s)NUMERIC(p,s)精確數值存儲自增序…

JVM 性能調優實戰:讓系統性能 “飛” 起來的核心策略

在 Java 應用的生命周期中&#xff0c;性能問題如同隱藏的 “暗礁”—— 初期可能不顯眼&#xff0c;但隨著用戶量增長和業務復雜度提升&#xff0c;微小的性能損耗會被無限放大&#xff0c;最終導致系統響應遲緩、頻繁卡頓甚至崩潰。JVM 性能調優的目標&#xff0c;就是通過優…

Android Handler 完全指南

在 Android 開發中&#xff0c;Handler 是線程通信的核心工具 —— 當你在子線程下載圖片后需要更新 UI&#xff0c;當你在 TCP 連接中收到數據需要通知界面&#xff0c;當你需要延遲執行某個任務時&#xff0c;都會用到 Handler。這個看似簡單的類&#xff0c;卻蘊含著 Androi…

梳理Ego-Planner模式下5通道、6通道與無人機模式的關系

Copilot said: 你需要梳理Ego-Planner模式下5通道、6通道與無人機模式的關系&#xff0c;以及軌跡跟隨、緊急情況和人工接管的流程。下面結合你的描述和三張圖片&#xff0c;對核心邏輯進行總結和整理&#xff1a; --- ## 一、狀態組合與對應模式&#xff08;見圖1&#xff09;…

odbc和jdbc什么區別

ODBC 和 JDBC 都是用于連接和操作數據庫的標準接口&#xff0c;但它們分別面向不同的編程語言和平臺。下面是它們的區別與對比&#xff0c;幫助你理解它們的用途和適用場景。&#x1f4ca; 一、基本概念對比特性ODBC&#xff08;Open Database Connectivity&#xff09;JDBC&am…

境外期貨Level2高頻Tick歷史行情數據獲取與應用指南

在金融量化分析中&#xff0c;本地數據的高效使用是提升策略效果的重要基礎。本文以CSV格式的本地數據為核心&#xff0c;以外盤期貨分鐘數據、CME/COMEX/CBOT歷史行情為例&#xff0c;闡述專業化的數據處理與應用方法&#xff0c;為研究者提供可行性方案。一、數據預處理標準化…

迅為RK3588開發板安卓GPIO調用-APP運行測試

將網盤上的安卓工程文件復制到 Windows 電腦上。確保工程路徑中使用英文字符&#xff0c;不包含中文。接著&#xff0c;啟動 Android Studio&#xff0c;點擊“Open”按鈕選擇應用工程文件夾&#xff0c;然后點擊“OK”。由于下載 Gradle 和各種 Jar 包可能需要一段時間&#x…

以太坊下一階段的關鍵——隱私

1. 引言 隨著以太坊慶祝其十周年紀念&#xff0c;Aztec Labs 聯合創始人兼 CEO Zac Williamson 和以太坊基金會 PSE 負責人 Sam Richards 表示&#xff0c;以太坊必須加強其對隱私的原始承諾。 以太坊慶祝十周年紀念&#xff0c;標志著智能合約、去中心化金融&#xff08;DeF…

CTFpwn學習筆記1-棧溢出

棧溢出通過寫入超出數組定義范圍的字符長度達到溢出&#xff0c;從而覆蓋棧上其余數據&#xff0c;覆蓋返回地址約等于控制程序執行流例如&#xff1a;經過ida反編譯后&#xff0c;發現這里要將v2的值修改為11.28125才能獲得flag&#xff0c;同時我們可以發現這里使用了gets這個…

使用 Android Studio 中的 Gemini,讓 Flutter 開發更便捷

作者 / Flutter 產品經理 Ander Dobo 及 Gemini in Android Studio 產品經理 Sandhya Mohan在 Android Studio 中創建 Android 應用的 Flutter 開發者將迎來一次重大的飛躍: Android Studio 中的 Gemini 已全面支持 Dart 和 Flutter 開發&#xff01;這意味著您可以直接在您青睞…

Deep Learning_ Foundations and Concepts-Springer (2024)【拜讀】前向編碼器20章

Diffusion Models 擴散模型 我們已經了解到&#xff0c;構建強大的生成模型的一種有效方法是&#xff1a;先引入一個關于潛在變量z的分布p(z)&#xff0c;然后使用深度神經網絡將z變換到數據空間x。由于神經網絡具有通用性&#xff0c;能夠將簡單固定的分布轉化為關于x的高度靈…

Spring全局異常處理最佳實踐

全局異常處理器詳解 什么是全局異常處理器&#xff1f; 全局異常處理器是Spring框架提供的統一異常處理機制&#xff0c;用于集中處理應用程序中所有控制器&#xff08;Controller&#xff09;層拋出的異常。它的核心價值在于&#xff1a; 統一異常處理&#xff1a;避免在每個C…

STL學習(十一、常用的算數算法和集合算法)

目錄 一、常用的算數算法 1.accmulate 2.fill 二、常用的集合算法 1.set_intersection 2.set_union 3.set_difference 一、常用的算數算法 包含頭文件為<numeric> 1.accmulate 函數原型 accmulate(iterator beg, iterator end, value) // 計算元素累計和 // …

DeepSort 算法分析詳解

DeepSort 算法分析詳解 DeepSort 簡介 DeepSort (Deep Learning Sort) 是一種基于深度學習的多目標跟蹤算法&#xff0c;由 Wojke 等人于 2017 年提出。它是對傳統 Sort (Simple Online and Realtime Tracking) 算法的改進&#xff0c;通過引入深度特征提取網絡來增強目標關聯的…

基于深度學習的醫學圖像分析:使用Capsule Networks實現醫學圖像分類

前言 醫學圖像分析是計算機視覺領域中的一個重要應用&#xff0c;特別是在醫學圖像分類任務中&#xff0c;深度學習技術已經取得了顯著的進展。醫學圖像分類是指將醫學圖像分配到預定義的類別中&#xff0c;這對于疾病的早期診斷和治療具有重要意義。近年來&#xff0c;Capsule…

G9打卡——ACGAN

&#x1f368; 本文為&#x1f517;365天深度學習訓練營中的學習記錄博客&#x1f356; 原作者&#xff1a;K同學啊 1.導入庫及參數 import argparse import os import numpy as npimport torchvision.transforms as transforms from torchvision.utils import save_imagefrom…

應用war/jar包是用TongWeb企業版,還是嵌入版?

在判斷應用應該采用TongWeb哪個版本時&#xff0c;存在一種錯誤的觀點&#xff1a;如果應用包是jar包&#xff0c;則需要采用TongWeb嵌入版&#xff1b;如果應用包是war包&#xff0c;則需要采用TongWeb企業版。 正確的判斷方法&#xff1a;1. 首先應用為jar包&#xff0c;且符…