Como investigar comandos sendo executados ao alterar diretórios?

2

Eu vejo “ awk ”, “ encontrar ”, “ sed ” e “ qual ” momentaneamente aparecem no título da janela do meu Terminal ao alterar os diretórios. (E nem todos estes aparecem sempre e pode haver algum que eu estou perdendo; eu imagino que isso é porque o título muda várias vezes antes de redesenhar a interface do usuário.)

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

Nota sobre Contexto: Eu estou procurando uma abordagem investigativa geral para descobrir o que está chamando os sub-comandos. A mentalidade do meu programador me faz querer uma solução que substituiria temporariamente o subcomando por um stub (à la #define / #undef ) que despejaria um rastreamento de pilha no ponto de chamada, em seguida, ligue para o comando original ou apenas cancele. Essa abordagem pode ou não ser aplicável ao shell.

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

    
por Slipp D. Thompson 17.04.2013 / 23:34

2 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_cwd ou set .

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

    
por 18.04.2013 / 18:03
0

Seu problema não é com o comando em si. O problema é com o status do git no PS1. Simplesmente, toda vez que você fornecer um comando, o PS1 será avaliado. Para que o status do git apareça, há um lote de comandos executado no diretório de trabalho atual. Por exemplo, ele verifica se o diretório atual é um repositório git ou não, então verifica o nome da ramificação, pode ser 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.

    
por 19.04.2013 / 03:50