Solução
Isso deve funcionar:
PS4='+%x:%I>' zsh -i -x -c '' |& grep subl
Isso deve imprimir algo como
+/Users/brandon/.zshrc.d/aliases.zsh:32>alias 'subl=/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl'
Isso significa que no arquivo /Users/brandon/.zshrc.d/aliases.zsh (apenas por exemplo) na linha 32 o comando alias 'subl=/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl' foi executado. Note que a linha de comando mostrada é o resultado da análise do comando escrito no arquivo, como tal, eles podem não ser indentais.
Explicação
A configuração de zsh é essencialmente uma lista de comandos do shell. As informações de onde um comando foi executado normalmente só estão disponíveis no momento em que o comando é executado. Uma vez que o comando termine, quaisquer alterações no ambiente ou configurações do shell podem permanecer, mas a informação de como essas mudanças ocorreram se foi. Portanto, pesquisar os arquivos de configuração ou rastrear as informações durante o tempo de execução são as únicas opções.
A pesquisa nos arquivos de configuração é - como você percebeu - propensa a erros, já que é fácil ignorar alguns arquivos de configuração; zsh carrega diretamente até oito arquivos de configuração diferentes ao iniciar um shell interativo e qualquer número de arquivos adicionais pode ser originado de lá.
É aqui que entra zsh XTRACE ( -x ). Semelhante a VERBOSE ( -v ) XTRACE imprime as linhas de comando que são executadas, mas também precede cada linha com o prompt PS4 . PS4 pode ser configurado para mostrar o arquivo e o número da linha atualmente executados. (Por padrão, PS4 mostra o nome da função ou arquivo de script e o número da linha atualmente executada. Portanto, se uma linha de código estiver dentro de uma função, ela não mostrará imediatamente onde está definida.).
Em detalhes, o comando acima faz o seguinte:
-
Defina a variável de ambiente
PS4para+%x:%I>(somente para este comando).%xé substituído pelo nome do arquivo que contém o código-fonte atualmente em execução.%Ié o número da linha desse código dentro do arquivo.+e>são decoração para diferenciarXTRACEde saída de qualquer saída que o script possa gerar.Observação: Isso pode não funcionar corretamente se
PS4estiver definido com um valor diferente em algum lugar da configuração. Caso a saída não tenha o formato desejado, pode ser necessário primeiro remover / comentar as configuraçõesPS4ouPROMPT4. -
zshcomeça zsh- com o modo interativo ativado (
-i) - com
XTRACEativado (-x) - e apenas executa uma linha de comando vazia (
-c ''), saindo imediatamente depois disso.
Isso significa que apenas os arquivos de inicialização para o modo interativo são executados e não há confusão de geração de prompt ou comandos de gancho.
- com o modo interativo ativado (
-
|&é um atalho para2>&1 |, que liga o saída padrão e erro padrão de um comando para o entrada padrão do a seguir. -
grep sublprocura por "subl". Sugiro procurar apenas o nome do alias, pois a linha de comando exata pode não seralias subl="..."devido à análise. (Em zsh você pode até mesmo definir um alias sem usar o comandoaliasatravés da atribuição de valor-chave em pares na matriz assoziativealiases:aliases[subl]="...")