2 votes

Comment puis-je enquêter sur les commandes exécutées lors d'un changement de répertoire ?

Je vois " awk ", " trouver ", " sed ", et " dont " apparaissent momentanément dans le titre de ma fenêtre Terminal lors d'un changement de répertoire. (Et tous n'apparaissent pas toujours et il se peut que certains m'échappent ; j'imagine que c'est parce que le titre change plusieurs fois avant que l'IU ne se redessine).

Bien que ce soit probablement juste quelques Shell Shell et ajouts que j'ai installés en cours de route (statut git dans PS1, peut-être), J'aimerais enquêter pour m'en assurer. . Existe-t-il un moyen simple de savoir quel(s) script les appelle(nt) ?

Note sur le contexte : Je cherche une approche d'investigation générale pour découvrir ce qui appelle les sous-commandes. Mon esprit de programmeur me pousse à vouloir une solution qui remplacerait temporairement la sous-commande par une sous-commande stubée. (à la #define / #undef ) qui vide une trace de la pile au point d'appel, puis appelle la commande originale ou abandonne. Cette approche peut ou non être applicable au Shell.

Aussi : Je suis principalement sous OS X 10.8 et j'utilise GNU bash 3.2.48. Je ne suis pas sûr que le système et la version de bash soient complètement pertinents pour le problème en question - une solution qui fonctionne également sur mon instance Debian serait la bienvenue.

1voto

Dave Points 986

Avec bash, vous pouvez utiliser set -o verbose :

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

bash -lv démarrerait un nouveau login Shell avec la même option activée.

Par exemple update_terminal_cwd est défini dans /etc/bashrc qui n'est pas indexé par Spotlight. Mais vous pouvez voir la définition avec declare -f update_terminal_cwd o set .

sudo opensnoop -n bash montre quels fichiers sont accédés par les processus nommés bash.

0voto

Bichoy Points 238

Votre problème ne vient pas de la commande elle-même. Le problème est avec le statut git dans PS1. Simplement, chaque fois que vous fournissez une commande, PS1 est évalué. Pour que le statut git apparaisse, il y a un lot de commandes exécutées dans le répertoire de travail actuel. Par exemple, il vérifie si le répertoire actuel est un repo git ou non, puis vérifie le nom de la branche, peut être un certain nombre de commit ou quel statut vous avez décidé de garder.

Je ne suis pas sûr que la solution proposée par Lauri permette d'afficher ces évaluations ou non, mais vous pouvez tenter votre chance.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X