Alias

為什麼 strace 忽略我的 rm 別名?

  • January 7, 2015

alias有一套我的rm命令。如果我執行alias命令,這就是我得到的輸出。

alias rm='rm -i'

現在,當我執行rm命令時,它按預期工作。

rm ramesh
rm: remove regular empty file `ramesh'? y

現在,我正在學習執行命令時正在呼叫的系統呼叫。strace為此,我從這裡了解了該命令,該命令列出了我執行某些命令時正在呼叫的文件。命令如下。

strace -ff -e trace=file rm ramesh 2>&1 

該命令工作得很好,只是它忽略了我為rm命令設置的別名。它會在不提示使用者的情況下刪除文件。

那麼,是否strace忽略這樣的別名?如果是這樣,為什麼會這樣?

編輯:

不確定,如果這有什麼關係,但type -a rm給我的輸出是,

rm is aliased to `rm -i'
rm is /bin/rm

那麼/bin/rm在這種情況下是否考慮這就是為什麼在刪除之前沒有提示使用者的原因?

strace不執行rm -i的原因與以下相同:

echo rm

不輸出rm -i

別名是少數 shell 的一項功能,允許在命令位置找到某些字元串時自動替換為另一個字元串。

在:

alias foo='whatever'
foo xxx

貝殼將其擴展為:

whatever xxx

並經歷另一輪解釋,在這種情況下導致執行whatever命令。

只有在命令位置(作為命令行的第一個字)找到別名時才會擴展別名。

zsh支持全域別名。

你可以這樣做:

alias -g rm='rm -i'

但是您不想這樣做,因為這意味著:

echo rm

例如會輸出rm -i

引用自:https://unix.stackexchange.com/questions/156103