J'ai un alias
ensemble pour ma rm
commande. Si j'exécute la alias
commande, c'est ce que j'obtiens en sortie.
alias rm='rm -i'
Maintenant, lorsque j'exécute la rm
commande, 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 strace
commande 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 rm
commande. Il supprime le fichier sans inviter l'utilisateur.
Alors, strace
ignore-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 rm
me donne la sortie comme,
rm is aliased to `rm -i'
rm is /bin/rm
Envisage-t-il donc /bin/rm
dans ce cas ce qui explique pourquoi l'utilisateur n'est pas invité avant la suppression?
strace
un alias, vous devez utiliser strace
le shell, qui implémente l'alias. Il y a quelques approches que vous pouvez adopter pour faire cela: strace -p $$ &
ou strace bash
ou strace sh -c 'rm ramesh'
(la dernière ignorera également l'alias, mais pour une raison entièrement différente.)
strace
n'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.strace
est un programme différent, et àstrace
l' 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.