J'ai un aliasensemble pour ma rmcommande. Si j'exécute la aliascommande, c'est ce que j'obtiens en sortie.
alias rm='rm -i'
Maintenant, lorsque j'exécute la rmcommande, cela fonctionne bien comme prévu.
rm ramesh
rm: remove regular empty file `ramesh'? y
Maintenant, j'apprenais sur les appels système qui sont appelés lorsque j'exécute une commande. Pour cela, j'ai pris connaissance de la stracecommande d' ici qui me répertorie les fichiers qui sont appelés lorsque j'exécute une commande. La commande est comme ci-dessous.
strace -ff -e trace=file rm ramesh 2>&1
La commande fonctionne parfaitement bien, sauf qu'elle ignore mes alias que j'ai en place pour ma rmcommande. Il supprime le fichier sans inviter l'utilisateur.
Alors, straceignore-t-il des alias comme celui-ci? Si oui, pourquoi en est-il ainsi?
ÉDITER:
Pas sûr, si cela a quelque chose à faire mais type -a rmme donne la sortie comme,
rm is aliased to `rm -i'
rm is /bin/rm
Envisage-t-il donc /bin/rmdans ce cas ce qui explique pourquoi l'utilisateur n'est pas invité avant la suppression?
straceun alias, vous devez utiliser stracele shell, qui implémente l'alias. Il y a quelques approches que vous pouvez adopter pour faire cela: strace -p $$ &ou strace bashou strace sh -c 'rm ramesh'(la dernière ignorera également l'alias, mais pour une raison entièrement différente.)
stracen'ignore pas les alias, car cela impliquerait qu'il y avait quelque chose à ignorer en premier lieu. Un alias est une caractéristique du shell.straceest un programme différent, et àstracel' intérieur du concept d'alias n'existe pas, donc il n'y a rien à ignorer. L'API fournie par le noyau pour l'exécution des programmes n'a pas non plus de concept d'alias, donc il n'y a aucun moyen que le shell puisse dire strace au sujet des alias, même s'il le voulait.