我使用别名来防止意外删除文件,并且我想对目录执行类似的操作。
对于文件,我将以下内容添加到我的.bashrc
:
alias rm="rm -i"
我还想防止自己意外删除目录,我已经尝试这样做:
alias rm -rf="rm -rfi"
和这个:
alias "rm -rf"="rm -rfi"
但两者都不起作用。有什么建议么?
答案1
来自 bash(1):
别名
[...]每个简单命令的第一个单词,如果不加引号,将检查它是否有别名[...]字符[...]和上面列出的任何 shell 元字符或引用字符可能不会出现在别名中。
因此别名只能是一个没有任何引号字符的单词。
在对 rm 的调用中同时使用-f
and-i
也没有多大意义,因为它们有些矛盾(rm(1)):
-f, --force 忽略不存在的文件和参数,从不提示
-我 每次删除前都会提示
但这是一件好事 -rm
即使您正在调用 ,您的别名实际上也会被使用rm -r
,因为第一个单词 - rm
- 有一个别名 - rm -i
,所以它会被替换!
$ alias rm
bash: alias: rm: not found
$ alias rm='rm -i'
$ mkdir test
$ rm -r test
rm: remove directory ‘test’?
/编辑:Raphael Ahrens 在评论中还提到,-f
不需要使用(强制)来删除目录(正如我的示例中已经看到的那样),-r
(递归)足够了:
-r, -R, --recursive 递归删除目录及其内容
答案2
别名rm
是危险的。一旦你在一个没有设置这些别名的盒子上,你就会造成一些损害。
至于“防止自己意外删除目录”,这就是该-r
标志的目的。
请不要覆盖这样的命令,你永远不知道脚本会做出什么假设。如果必须,请选择 以外的名称rm
,否则请更改工作流程中的某些内容,以免您无法使用rm -rf
。