Eu tenho um alias
conjunto para o meu rm
comando. Se eu executar o alias
comando, é isso que recebo como saída.
alias rm='rm -i'
Agora, quando executo o rm
comando, ele funciona bem como esperado.
rm ramesh
rm: remove regular empty file `ramesh'? y
Agora, eu estava aprendendo sobre as chamadas do sistema que estão sendo chamadas quando executo um comando. Para isso, fiquei sabendo do strace
comando a partir daqui, que lista os arquivos que estão sendo chamados quando executo algum comando. O comando é como abaixo.
strace -ff -e trace=file rm ramesh 2>&1
O comando funciona perfeitamente bem, exceto que ignora meus aliases que eu tenho para o meu rm
comando. Exclui o arquivo sem avisar o usuário.
Então, strace
ignora aliases como este? Se sim, por que é assim?
EDITAR:
Não tenho certeza, se isso tem algo a ver, mas type -a rm
me fornece a saída como,
rm is aliased to `rm -i'
rm is /bin/rm
Portanto, /bin/rm
neste caso, é por isso que o usuário não é solicitado antes da exclusão?
strace
um alias, precisará strace
do shell, que implementa o alias. Há algumas abordagens que você pode tomar para fazer isso: strace -p $$ &
ou strace bash
ou strace sh -c 'rm ramesh'
(a última vontade também ignoram o alias, mas por uma razão completamente diferente.)
strace
não ignora aliases, porque isso implicaria que havia algo a ser ignorado em primeiro lugar. Um alias é um recurso do shell.strace
é um programa diferente e, dentrostrace
do conceito de alias, não existe; portanto, não há nada a ignorar. A API fornecida pelo kernel para a execução de programas também não possui um conceito de aliases; portanto, não há como o shell diferenciar os aliases, mesmo que desejasse.