Listen Sie nur temporäre Aliase in Bash auf

Listen Sie nur temporäre Aliase in Bash auf

Ich weiß, dass ich mit alle Aliase in einer bestimmten Bash-Sitzung auflisten kann alias -p. Gibt es eine Möglichkeit, eine Liste aller temporären Aliase in einer bestimmten Bash-Sitzung zu erhalten, also aller Aliase, die nicht in meinem Bash-Profil enthalten sind?

Danke!

Antwort1

So einfach ist es nicht. In Bash gibt es kein Konzept für „temporäre“ Aliase, und für Bash ist jeder Befehl, der durch die Verwendung von .bashrc ausgeführt wird, derselbe wie jeder, den Sie in die Befehlszeile eingeben. Darüber hinaus können die Bash-Profildateien einige Aliase nur unter bestimmten Umständen definieren.

Sie können die Aliase, die nach der Ausführung der Bash-Profildateien festgelegt werden, in einer Variablen (oder Datei) speichern und dann bei Bedarf den Unterschied zwischen dieser Variablen und den aktuell festgelegten Aliasnamen überprüfen:

$ 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=''

diffzeigt, dass seit der Deklaration von ein Alias ls​​entfernt und ein Alias tmp_alias​​hinzugefügt wurde BASE_ALIAS.

Antwort2

Dies können Sie folgendermaßen erreichen:

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

Dies funktioniert, indem die aktuelle Liste der Aliase mit den in einer brandneuen Shell vorhandenen Aliasen verglichen wird.
Das commDienstprogramm wird verwendet, um nur die Zeilen anzuzeigen, die im ersten Befehl vorhanden sind <(alias -p). Dies --nocheck-orderist notwendig, damit es nicht beschwert, dass die Aliasliste nicht in Ordnung ist, obwohl sie es wirklich ist ...

verwandte Informationen