Ho un alias
set per il mio rm
comando. Se eseguo il alias
comando, questo è ciò che ottengo come output.
alias rm='rm -i'
Ora, quando eseguo il rm
comando 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 strace
comando 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 rm
comando. Elimina il file senza richiedere all'utente.
Quindi, strace
ignora gli alias in questo modo? Se è così, perché è così?
MODIFICARE:
Non sono sicuro, se questo ha qualcosa da fare ma type -a rm
mi dà l'output come,
rm is aliased to `rm -i'
rm is /bin/rm
Quindi sta considerando /bin/rm
in questo caso quale è il motivo per cui all'utente non viene richiesto prima della cancellazione?
strace
un alias, devi utilizzare strace
la shell, che implementa l'alias. Ci sono alcuni approcci che potresti adottare per farlo: strace -p $$ &
o strace bash
oppure strace sh -c 'rm ramesh'
(l'ultimo ignorerà anche l'alias, ma per una ragione completamente diversa.)
strace
non 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'internostrace
del 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.