“ alias rm =“ rm -i”是否被认为有害?


17

我已经读过一段时间(找不到参考),使用这样的别名alias rm="rm -i"是非常糟糕的。

是否有历史证据或常识性的解释?

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



我想我找到了您提到的主题。
丹尼尔·贝克

1
@Daniel确实是此主题中最受推崇的答案,它提到了这种不良做法,但这并不是问题的中心话题。
Dunaril

Answers:


36

你是对的。

这很糟糕,因为您已经习惯了。如果您所在的系统没有此功能,并且您拥有rm,它会立即开始删除,您想知道发生了什么。

许多用户习惯于通过SSH连接到不同的系统。因此,使用很多不同的系统(有时没有设置个性化的用户帐户(包括别名))非常普遍。

相反,使用eg alias rmi='rm -i'并学习使用它。如果未在其他系统上设置该文件,则说明您并非意外删除文件,并且总是可以退回到键入完整命令。


4

就像@Daniel所说的那样,除了训练您期望它在那里之外,它本身并没有害处。实际上,这是CentOS上的默认设置(我假设是RHEL的扩展名,因为使用过一个,已经太久了),这给tuchus带来了极大的痛苦。在那段时间的余下时间里,我键入/ bin / rm以避免设置“ Linux那些不应该具有root访问权限的人”。


3
RHEL默认情况下具有此功能,至少在我使用的系统上是正确的。
丹尼尔·贝克

4

我认为最大的危险是人们可能会依靠这种方法来过滤故障。假设您要从目录中删除一些图像,但不是全部图像:

rm -i pics/*.jpg

您可以使用它手动过滤全局,这是完全合理的。但是,如果您为它加上了别名并且正在使用rm并且碰巧在没有该别名的情况下进入了外壳并进行了尝试……您只是删除了所有图片,哎呀!

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


很好的例子。当然,如果你喜欢的危险,或赌博...
Dunaril

2

除了但以理贝克说,我发现自己使用-f绕过-i,因为它导致使用这是潜在的危险rm -frm -rf不必要的。某种程度上相关:一种预防rm -rf问题的方法是创建一个名为“ -i”的文件,以回答该问题:如何防止意外的rm -rf / *?

但是再说一次,如果没有该别名,我就不会使用-f,整个事情就不会成为问题。


3
看来您找到了使这种不良习惯变得更糟的方法:)
Dunaril'2

0

根据我过去与数百名用户一起工作的经验,这种方法危害小得多:

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更加具体。我并不是要分享代码本身,而是分享它带来的用户体验更改。


卡米尔:我的回答包括,从rm -i历史上(以我的经验来看,拥有数百个用户)会导致错误的文件删除,并且所包含的功能已训练用户使用正确的通配符,从而降低了错误率。因此,rm -i 为了方便起见,我已经解决了困扰的关键问题并提供了解决方案,仅在功能下方的要点并不妨碍它们之间的紧密联系。
Alex North-Keys
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.