
我知道要列出給定 bash 會話中的所有別名alias -p
。有沒有辦法取得給定 bash 會話中所有臨時別名的列表,即不在我的 bash 設定檔中的所有別名?
謝謝!
答案1
事情沒那麼簡單。 bash 中沒有「臨時」別名的概念,對於 bash 來說,透過 source .bashrc 執行的任何命令都與您在命令列中鍵入的任何命令相同。此外,bash 設定檔只能在某些情況下定義一些別名。
您可以將執行 bash 設定檔後設定的別名儲存到變數(或檔案)中,然後在需要時檢查該變數與目前設定的別名之間的差異:
$ BASE_ALIAS="$(alias | sort)"
$ alias tmp_alias=""
$ unalias ls
$ diff <( echo "$BASE_ALIAS" ) <( alias | sort )
3d2
< alias ls='ls --color=auto'
5a5
> alias tmp_alias=''
diff
顯示自聲明以來別名ls
已刪除並新增了別名。tmp_alias
BASE_ALIAS
答案2
您可以透過以下方法來做到這一點:
comm -2 -3 --nocheck-order <(alias -p) <(bash -l -c 'alias -p')
這是透過將目前別名清單與全新 shell 中存在的別名進行比較來實現的。
此comm
實用程式用於僅顯示第一個命令中出現的行<(alias -p)
。有--nocheck-order
必要防止它抱怨別名列表不按順序,即使它確實是...