Listar apenas aliases temporários no bash

4

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

Obrigado!

    
por Mason 17.04.2012 / 03:35

2 respostas

6

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

Você pode salvar em uma variável (ou arquivo) os aliases que são definidos depois que os arquivos do perfil bash são executados e, quando você 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=''

diff mostra que um alias ls foi removido e um alias tmp_alias foi adicionado desde a declaração de BASE_ALIAS .

    
por 17.04.2012 / 04:06
2

Você pode 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 utilitário comm é usado para mostrar apenas linhas que estão presentes no primeiro comando <(alias -p) . O --nocheck-order é necessário para evitar que reclamar que a lista de alias não está em ordem, mesmo que seja realmente ...

    
por 17.04.2012 / 12:52

Tags