Tengo un alias
conjunto para mi rm
comando. Si ejecuto el alias
comando, esto es lo que obtengo como salida.
alias rm='rm -i'
Ahora, cuando ejecuto el rm
comando funciona bien como se esperaba.
rm ramesh
rm: remove regular empty file `ramesh'? y
Ahora, estaba aprendiendo sobre las llamadas al sistema que se están llamando cuando ejecuto un comando. Para eso llegué a conocer el strace
comando desde aquí que me enumera los archivos que se llaman cuando ejecuto algún comando. El comando es el siguiente.
strace -ff -e trace=file rm ramesh 2>&1
El comando funciona perfectamente bien, excepto que ignora los alias que tengo para mi rm
comando. Elimina el archivo sin preguntar al usuario.
Entonces, ¿ strace
ignora alias como este? Si es así, ¿por qué es así?
EDITAR:
No estoy seguro, si esto tiene algo que ver pero type -a rm
me da la salida como,
rm is aliased to `rm -i'
rm is /bin/rm
Entonces, ¿está considerando /bin/rm
en este caso por qué no se solicita al usuario antes de la eliminación?
strace
un alias, debe strace
usar el shell, que implementa el alias. Hay algunos enfoques que se pueden tomar para hacer eso: strace -p $$ &
o strace bash
o strace sh -c 'rm ramesh'
(la última voluntad también ignoran el alias, pero por una razón completamente diferente.)
strace
no ignora los alias, porque eso implicaría que había algo que ignorar en primer lugar. Un alias es una característica del shell.strace
es un programa diferente, y dentrostrace
del concepto de alias no existe, por lo tanto no hay nada que ignorar. La API proporcionada por el núcleo para ejecutar programas tampoco tiene un concepto de alias, por lo que no hay forma de que el shell pueda decirle a Strace sobre los alias, incluso si así lo quisiera.