举一个极端的例子,让我仅对标准命令进行别名,以说明为什么对标准命令进行别名可能有害:
alias ls='rm'
显然,这很糟糕,因为有一天会引起令人讨厌的惊喜。同样,用别名替换标准命令最终会在您最不期望的情况下导致不幸的意外。
但是,让我提出一个普遍的情况,几乎每一个Unix管理员在职业生涯中都会遇到这种情况:
在将来的某一天,您将开始一项新工作,并将在其他人建立的新系统上工作。星期六是凌晨三点,您并没有直截了当,容易出错。您的标准环境将不可用。实际上,您是root。
鉴于此,您是否还记得rm
不是别名rm -i
?每次登录该框时,是否都要检查特殊别名?如果您更改根的环境,您的同事会对您的更改感到满意吗?
老实说,我对此持反对态度。在我的职业生涯中,我已经开发了成千上万个系统,如果我确实在所有这些系统上修改了环境,那么将很难看到其价值。
混叠rm
到rm -i
是很常见的,我已经看到了防止许多问题,但同时也造成了许多的惊喜和额外的工作来恢复误删除的文件小时。
因此,现在我尝试避免对常见的系统命令使用别名。取而代之的是,我使用别名和函数来执行Shell无法轻松完成的事情。我现在倾向于做的是在别名上附加一个字母,例如:
# List long, with color or special characters, depending on OS
alias ll='ls -l'
# Long, with metacharacters, show dotfiles, don't show . and ..
alias lll='ls -lA'
# Long, with metacharacters, show dotfiles, show . and ..
alias lla='ls -la'
# List just the dotfiles
alias l.='ls -l -Ad .????*'
# Useful greps
#alias hgrep='history |grep ${*} |grep -v $$'
alias greph='history |grep ${*}'
alias grepp='ps -ef |grep ${*}'
### Highlight some text.
# From http://unix.stackexchange.com/questions/366/convince-grep-to-output-all-lines-not-just-those-with-matches/367#367
highlight () { grep --color -E "$1|$" $2 ; }
也许我真的应该摆脱我的最终别名,因为适应新的做法需要时间:
# For safety!
alias rm='rm -i'
rm -i
,它都会训练我更多一点来自动添加-f
标志。