Alias
為什麼 strace 忽略我的 rm 別名?
我
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
。