`alias rm="rm -i"` 被认为有害吗?

`alias rm="rm -i"` 被认为有害吗?

我之前读到过(找不到参考资料)使用这样的别名是alias rm="rm -i"非常糟糕的。

这一事实有历史证据或常识解释吗?

我认为这会给用户带来依赖确认提示来检查命令的坏习惯,如果他在另一个没有别名的配置文件上这样做,可能会导致灾难。

答案1

你说得对。

这很糟糕,因为你习惯了。如果你的系统没有这个功能,而你rm,它会立即开始删除,你不知道发生了什么。

许多用户习惯于通过 SSH 进入不同的系统;因此使用许多不同的系统(有时没有设置个性化的用户帐户(包括别名))的情况相当常见。

相反,使用 egalias rmi='rm -i'并学会使用它。如果其他系统上没有设置它,您就不会意外删除文件,并且可以随时返回键入完整命令。

答案2

就像 @Daniel 所说的那样,它本身并没有什么害处,除了让你觉得它会在那里。事实上,它是 CentOS(以及我猜想的 RHEL 的扩展 - 我已经很久没用过它了)机器上的默认设置,这真是太痛苦了在那次演出的剩余时间里,我输入了 /bin/rm,以避免“为没有 root 访问权限的人准备的 Linux”设置。

答案3

我认为最大的危险是人们可能会依赖类似这样的东西来过滤 glob。想象一下,你想从目录中删除一些图像,但不是全部:

rm -i pics/*.jpg

你可以使用它来手动过滤 glob,这完全合理。但是,如果你已经为它设置了别名,并且正在使用,rm并且碰巧进入了一个没有该别名的 shell 并尝试它……你只是删除了所有图片,哎呀!

我个人也发现这个别名对我的血压有害 ;)。但这只是我个人的看法。

答案4

这是很多根据我过去与数百名用户合作的经验,危害较小:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • 用户接受过正确使用通配符的培训,而不仅仅是使用“*”,然后依靠 y/n 提示来选择文件
  • rm当在缺少此功能或别名的其他环境中使用时,使用正确的通配符通常可以避免灾难rm -i
  • 我花更少的时间来恢复用户多次输入“y”的文件
  • 用户只需响应一次 - 为其使用提供强烈的积极反馈
  • Control-c 中断工作并报告不执行任何操作
  • 不是脚本,因此真实性rm未受影响,让其他程序无所畏惧。

代码风格大部分与 sh 兼容(除了用于echo .... | tr -d '\012'bash 之前的 shell),您可以随意制作自己的 bash 专用代码。我发帖不是为了分享代码本身,而是为了分享用户体验随之而来的变化。

相关内容