Ho un aliasset per il mio rmcomando. Se eseguo il aliascomando, questo è ciò che ottengo come output.
alias rm='rm -i'
Ora, quando eseguo il rmcomando funziona perfettamente come previsto.
rm ramesh
rm: remove regular empty file `ramesh'? y
Ora, stavo imparando le chiamate di sistema che vengono chiamate quando eseguo un comando. Per questo ho avuto modo di conoscere il stracecomando da qui che mi elenca i file che vengono chiamati quando eseguo un comando. Il comando è come di seguito.
strace -ff -e trace=file rm ramesh 2>&1
Il comando funziona perfettamente, tranne per il fatto che ignora i miei alias che ho in atto per il mio rmcomando. Elimina il file senza richiedere all'utente.
Quindi, straceignora gli alias in questo modo? Se è così, perché è così?
MODIFICARE:
Non sono sicuro, se questo ha qualcosa da fare ma type -a rmmi dà l'output come,
rm is aliased to `rm -i'
rm is /bin/rm
Quindi sta considerando /bin/rmin questo caso quale è il motivo per cui all'utente non viene richiesto prima della cancellazione?
straceun alias, devi utilizzare stracela shell, che implementa l'alias. Ci sono alcuni approcci che potresti adottare per farlo: strace -p $$ &o strace bashoppure strace sh -c 'rm ramesh'(l'ultimo ignorerà anche l'alias, ma per una ragione completamente diversa.)
stracenon ignora gli alias, perché ciò implicherebbe che c'era qualcosa da ignorare in primo luogo. Un alias è una caratteristica della shell.straceè un programma diverso e all'internostracedel concetto di alias non esiste, quindi non c'è nulla da ignorare. L'API fornita dal kernel per l'esecuzione dei programmi non ha neanche un concetto di alias, quindi non c'è modo in cui la shell possa dire la storia degli alias, anche se lo volesse.