
Я знаю, что для вывода списка всех псевдонимов в заданном сеансе bash с помощью alias -p
. Есть ли способ получить список всех временных псевдонимов в заданном сеансе bash, т. е. всех псевдонимов, которых нет в моем профиле bash?
Спасибо!
решение1
Не все так просто. В bash нет понятия "временных" псевдонимов, и для bash любая команда, выполняемая через sourcing .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')
Это работает путем сравнения текущего списка псевдонимов с псевдонимами, присутствующими в совершенно новой оболочке.
Утилита comm
используется для отображения только строк, которые присутствуют в первой команде <(alias -p)
. Это --nocheck-order
необходимо, чтобы она не жаловалась, что список псевдонимов не в порядке, хотя на самом деле это так...