
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=''
diff
zeigt, 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 comm
Dienstprogramm wird verwendet, um nur die Zeilen anzuzeigen, die im ersten Befehl vorhanden sind <(alias -p)
. Dies --nocheck-order
ist notwendig, damit es nicht beschwert, dass die Aliasliste nicht in Ordnung ist, obwohl sie es wirklich ist ...