bash で一時的なエイリアスのみを一覧表示する

bash で一時的なエイリアスのみを一覧表示する

特定の bash セッション内のすべてのエイリアスを一覧表示するには を使用しますalias -p。特定の bash セッション内のすべての一時エイリアス、つまり bash プロファイルにないすべてのエイリアスの一覧を取得する方法はありますか?

ありがとう!

答え1

それはそれほど単純ではありません。bash には「一時的な」エイリアスの概念はなく、bash の場合、.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_aliasBASE_ALIAS

答え2

これは次のようにして実行できます。

comm -2 -3 --nocheck-order <(alias -p) <(bash -l -c 'alias -p')

これは、現在のエイリアスのリストと、新しいシェルに存在するエイリアスを比較することによって機能します。
このcommユーティリティは、最初のコマンドに存在する行のみを表示するために使用されます<(alias -p)--nocheck-orderエイリアスのリストが実際には正しいにもかかわらず、エイリアスのリストが整然としていないというエラーが表示されないようにするためには、これが必要です...

関連情報