製作 Bash 別名

Nilesh Katuwal 2023年1月30日 2022年5月11日
  1. 在 Bash 中建立別名
  2. 建立帶引數的 Bash 別名
  3. 刪除 Bash 中的別名
製作 Bash 別名

別名是 shell 中的一個命令,它允許將一個單詞替換為另一個字串。它主要用於縮短系統命令或為常用命令提供預設引數。

它類似於快捷命令,具有與編寫整個命令相同的功能。

在 Bash 中建立別名

讓我們看一個例子。

$ alias update="sudo apt-get update"

我們建立了一個別名 update,它是 sudo apt-get update 的快捷方式。現在,當我們執行 update 時,它的工作方式與 sudo apt-get update 相同。

$ update

輸出:

[sudo] password for username: 
Get:1 https://typora.io/linux ./ InRelease [793 B]            
Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [114 kB]                                                                            
Hit:3 http://np.archive.ubuntu.com/ubuntu focal InRelease                                                                                            
Hit:4 http://ppa.launchpad.net/micahflee/ppa/ubuntu focal InRelease                                  
Ign:5 http://linux.dropbox.com/ubuntu disco InRelease                                                
Get:6 http://np.archive.ubuntu.com/ubuntu focal-updates InRelease [114 kB]                                                                           
Hit:7 http://linux.dropbox.com/ubuntu disco Release                                                                                                  
Ign:8 https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 InRelease                                                                            
Hit:10 https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/4.4 Release                                                                             
Get:12 http://security.ubuntu.com/ubuntu focal-security/main amd64 DEP-11 Metadata [35.7 kB]                                                         
Get:13 http://np.archive.ubuntu.com/ubuntu focal-backports InRelease [108 kB]                                                                        
Get:14 http://security.ubuntu.com/ubuntu focal-security/universe amd64 DEP-11 Metadata [66.3 kB]                                                     
Get:15 http://np.archive.ubuntu.com/ubuntu focal-updates/main amd64 DEP-11 Metadata [278 kB]                                                         
Get:16 http://security.ubuntu.com/ubuntu focal-security/multiverse amd64 DEP-11 Metadata [2,468 B]                                                   
Get:17 http://np.archive.ubuntu.com/ubuntu focal-updates/universe amd64 DEP-11 Metadata [363 kB]                                                     
Get:18 http://np.archive.ubuntu.com/ubuntu focal-updates/multiverse amd64 DEP-11 Metadata [940 B]                                                    
Get:19 http://np.archive.ubuntu.com/ubuntu focal-backports/main amd64 DEP-11 Metadata [7,996 B]                                                      
Get:20 http://np.archive.ubuntu.com/ubuntu focal-backports/universe amd64 DEP-11 Metadata [11.3 kB]                                                  
Fetched 1,102 kB in 9s (120 kB/s)                                                                                                                    
Reading package lists... Done

要列出所有別名,請執行以下命令。

$ alias

輸出:

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias echo='show'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias show='echo'
alias update='sudo apt-get update'

新建立的別名 update 也與所有其他別名一起在列表中。

建立帶引數的 Bash 別名

Bash 別名不直接接受引數。我們必須寫一個函式,因為函式機制的適應性更強,提供的功能和以前一樣。

儘管別名不帶引數,但可以以與別名相同的方式呼叫函式。讓我們看一個例子。

$ alias wargs='f(){ echo first "$@" last;  unset -f f; }; f'
$ wargs a b c

在上面的示例中,建立了一個臨時函式 f。引數在最後呼叫 f 時傳送。

未設定的 -f 選項在執行別名時消除了函式定義,確保它不會在之後逗留。

輸出:

first a b c last

刪除 Bash 中的別名

我們可以使用 unalias 命令刪除之前建立的別名 update

$ unalias update

讓我們再次檢查所有別名的列表。

$ alias

輸出:

alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias echo='show'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias show='echo'
alias wargs='f(){ echo first "$@" last;  unset -f f; }; f'

如輸出所示,別名 update 已從別名列表中刪除。