Como eu investigo comandos sendo executados ao alterar diretórios?

2

Eu vejo “ awk ”, “ encontrar ”, “ sed ”, e “ o que ” momentaneamente aparecer em título a minha Terminal da janela ao mudar diretórios.  (E nem todos esses sempre aparecem e pode haver alguns que estão faltando; imagino que isso ocorra porque o título muda várias vezes antes que a interface do usuário seja redesenhada.)

Embora isso seja provavelmente apenas alguns scripts e adições de shell que eu instalei ao longo do caminho (status git no PS1, talvez), eu gostaria de investigá-lo apenas para ter certeza . Existe uma maneira fácil de descobrir como os scripts estão chamando isso?

Nota sobre o contexto: estou procurando uma abordagem investigativa geral para descobrir o que está chamando os subcomandos. A mentalidade de meu programador me faz querer uma solução que substitua temporariamente o subcomando por um stubbed (à la #define/ #undef) que despeje um rastreamento de pilha no ponto de chamada e chame o comando original ou aborte. Essa abordagem pode ou não ser aplicável ao shell.

Além disso: eu estou principalmente no OS X 10.8 usando o GNU bash 3.2.48. Não tenho certeza se a versão do sistema e do bash é completamente relevante para o problema em questão - uma solução que funcione também na minha instância do Debian seria legal.

Slipp D. Thompson
fonte

Respostas:

1

Com o bash, você pode usar set -o verbose:

$ set -o verbose
update_terminal_cwd; 
$ cd ~/Documents
cd ~/Documents
update_terminal_cwd; 

bash -lv iniciaria um novo shell de login com a mesma opção ativada.

Por exemplo, update_terminal_cwdé definido em /etc/bashrc, que não é indexado pelo Spotlight. Mas você pode ver a definição com declare -f update_terminal_cwdou set.

sudo opensnoop -n bash mostra quais arquivos são acessados ​​por processos chamados bash.

Lri
fonte
0

Seu problema não está no próprio comando. O problema está no status do git no PS1. Simplesmente, toda vez que você fornece um comando, o PS1 é avaliado. Para que o status do git apareça, existe um lote de comando executado no diretório de trabalho atual. Por exemplo, verifica se o diretório atual é um repositório git ou não e, em seguida, verifica o nome da filial, pode haver algum número de confirmação ou qual status você decidiu manter.

Não tenho certeza se a solução sugerida por Lauri mostrará essas avaliações ou não, mas você pode tentar.

Bichoy
fonte
11
A coisa git-status-in-PS1 foi apenas um palpite, porque eu sei que tenho isso configurado. Embora eu saiba que provavelmente há outras coisas alterando meu PS1 (no meu sistema), o PS1 é a única coisa que é avaliada ao alterar diretórios? Ou existem outros ganchos que devo investigar?
Slipp D. Thompson
É claro que tentarei desabilitar minhas configurações do PS1 e ver se isso resolve meu problema específico. No entanto, o problema geral ainda permanece.
Slipp D. Thompson