Um alias, como ll
é definido com o alias
comando
Posso verificar o comando com coisas como as type ll
que imprimem
ll is aliased to `ls -l --color=auto'
ou command -v ll
que imprime
alias ll='ls -l --color=auto'
ou alias ll
que também imprime
alias ll='ls -l --color=auto'
mas não consigo encontrar onde o alias foi definido, ou seja, um arquivo como .bashrc
, ou talvez manualmente, no shell em execução. Neste ponto, não tenho certeza se isso é possível.
Devo simplesmente passar por todos os arquivos carregados bash
e verificar cada um deles?
bash -xl
Respostas:
A definição manual será difícil de identificar (os registros do histórico, talvez), embora solicite ao shell que mostre o que está fazendo e, em seguida
grep
, ajude a encontrar os definidos em um arquivo rc:Se o shell não estiver capturando com precisão as opções necessárias com uma das invocações acima (que executam interativamente o comando nulo), então
script
:Outra opção seria usar algo como
strace
ousysdig
encontrar todos os arquivos tocados pelo shell e depois acessá-grep
los manualmente (útil se o shell ou o programa não tiver um-x
sinalizador); os arquivos RC padrão não são suficientes para uma verificação manual do nome de arquivo, se algo como oh-my-zsh ou configurações específicas do site estão obtendo um código de quem sabe onde (ou também pode haver variáveis de ambiente, como sorontar aponta em sua resposta) .fonte
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Aqui é onde eu acho
grep -rl
muito útil:informará em qual arquivo a palavra
alias
é usada.Provavelmente dentro
~/.bashrc
e certamente dentro~/.bash_aliases
se existe.No entanto, é impossível ter certeza absoluta de que isso abrange todas as opções. Esses arquivos também podem chamar ou carregar outros arquivos. Uma variável de ambiente como ENV ou
$BASH_ENV
pode direcionar o bash para carregar outros arquivos.E aliases podem até ser definidos configurando uma variável (ênfase minha):
fonte
grep -rl alias ~/.bash*
pode corresponder falsamente aos arquivos de histórico, mas +1 por apontar a matriz BASH_ALIASES!Não conheço uma maneira de realmente listar a fonte de seus aliases, mas como parece que você está usando o bash, acho que esses são os possíveis arquivos de origem:
Você deve ser capaz de dar uma olhada neles para encontrar o alias, por exemplo
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.fonte
bash -x
, como você mencionou. Achei que o acima foi fácil de executar rapidamente e, se não encontrar o alias, você poderá ler as etapas de execução.Combinando a resposta do thrig com a sugestão do @ MarkPlotnick , você pode testar se
BASH_ALIASES[ll]
está definido para reduzi-lo. ABASH_SOURCE
matriz e asLINENO
variáveis são particularmente úteis aqui. Infelizmente, a verificação seBASH_ALIASES[ll]
está definida só será bem-sucedida após a definição do alias e, portanto, a primeira linha desse tipo poderá estar em outro arquivo.Dando saída como:
Você pode até terminar o shell usando esta verificação:
fonte
Eu tive sucesso usando simplesmente
which
.fonte
which
pode manipular aliases no tcsh (e talvez no csh anterior) e no zsh onde ele é embutido, e no bash usando o perfil padrão na família RedHat, que possui um kludge para executar o programa GNU (externo), mas alimentá-lo com dados alternativos de shell, caso contrário não . Mais importante, ele apenas informa como o alias está definido, não onde foi definido, qual era o Q aqui.Marque ~ / .profile se não estiver em ~ / .bashrc
fonte
Finalmente encontrei a
ll
definição de alias para nosso servidor Web (CentOS) em dois scripts de shell em/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Eu encontrei-o pelo primeiro aprendizado a partir dos comentários acima, onde o perfil de todo o sistema foi:
/etc/profile
. Esse arquivo indica que os aliases de todo o sistema são definidos/etc/bashrc
e, nesse arquivo, vi que ele percorre vários scripts de shell/etc/profile.d/
, e então useigrep
nesse diretório e finalmente encontrei as definições. Eu também descobri que existe uml.
alias que lista todos os arquivos de ponto:De
colorls.sh
:(Existem aliases equivalentes em
colorls.csh
.)fonte
Primeiro use os seguintes comandos
Listar todas as funções
Listar todos os aliases
Se você não encontrar o alias ou a função, considere um método de pesquisa mais agressivo
Versão Bash
Versão Zsh
Breve explicação das opções
fonte