Listar apenas aliases temporários no bash

Listar apenas aliases temporários no bash

Eu sei que para listar todos os aliases em uma determinada sessão do bash com alias -p. Existe uma maneira de obter uma lista de todos os aliases temporários em uma determinada sessão do bash, ou seja, todos os aliases que não estão no meu perfil do bash?

Obrigado!

Responder1

Não é tão simples assim. Não existe o conceito de aliases "temporários" no bash e, para o bash, qualquer comando executado pelo sourcing .bashrc é o mesmo que você digita na linha de comando. Além disso, os arquivos de perfil bash podem definir alguns aliases apenas em algumas circunstâncias.

Você pode salvar em uma variável (ou arquivo) os aliases que são definidos após a execução dos arquivos de perfil bash e então, quando precisar, verificar a diferença entre essa variável e os aliases atualmente definidos:

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

diffmostra que um alias lsfoi removido e um alias tmp_aliasfoi adicionado desde a declaração de BASE_ALIAS.

Responder2

Você poderia fazer isso com o seguinte:

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

Isso funciona comparando a lista atual de aliases com os aliases presentes em um novo shell.
O commutilitário é usado para mostrar apenas as linhas que estão presentes no primeiro comando <(alias -p). Isso --nocheck-orderé necessário para evitar que ele reclame que a lista de alias não está em ordem, mesmo que realmente esteja...

informação relacionada