Inspiré par cette question, intitulée: Quand les commandes intégrées sont-elles chargées en mémoire , en essayant de répondre à cela, j'ai essayé la commande suivante et j'ai été un peu surpris de ne pas pouvoir l'exécuter:
$ strace cd $HOME
Existe-t-il une méthode que je peux utiliser pour exécuter strace pour les commandes intégrées à Bash?
strace
de ne pas exécuter un programme n'entraîne pas de trace?Réponses:
Si vous pensez à comment cela
strace
fonctionne, il est tout à fait logique qu'aucun des éléments intégrés à Bash ne soit traçable.strace
ne peut suivre que les exécutables réels, contrairement aux buildins.Par exemple, ma
cd
commande:Astuce pour strace'ing cd?
Je suis tombé sur cette technique où vous pouviez invoquer
strace
lebash
processus réel et, ce faisant, tracer indirectement decd
cette façon.Exemple
Ce qui me permet d'être en mesure de structurer le
bash
processus comme suit:Il s'agit de l'invite Bash, où elle se trouve là, en attente d'une entrée. Donnons-lui donc la commande
cd ..
:De la sortie ci-dessus, vous pouvez voir où j'ai tapé la commande
cd ..
et appuyer sur Entrée, (\n
). De là, vous pouvez voir que lastat()
fonction a été appelée et qu'ensuite Bash est assis à une autreread(0..
invite, attendant une autre commande.la source
Pour
strace
le shell fairecd /some/dir
:la source
$1
ici, carbash
cela ne devrait-il pas être%
ou%1
?Vous pouvez essayer ce qui suit:
Par exemple:
la source