Вывести только временные псевдонимы в bash

Вывести только временные псевдонимы в bash

Я знаю, что для вывода списка всех псевдонимов в заданном сеансе 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_aliasBASE_ALIAS

решение2

Это можно сделать следующим образом:

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

Это работает путем сравнения текущего списка псевдонимов с псевдонимами, присутствующими в совершенно новой оболочке.
Утилита commиспользуется для отображения только строк, которые присутствуют в первой команде <(alias -p). Это --nocheck-orderнеобходимо, чтобы она не жаловалась, что список псевдонимов не в порядке, хотя на самом деле это так...

Связанный контент