由于某种原因,我的手指记忆已转换mv
为rm
.在我设法重新训练这些手指之前,我怎么可能有rm
提示当提供多个位置时(其中之一可能不存在)?
我知道该-I
选项将在三个以上的文件上提示,并且-i
将在每个文件上提示,但我需要类似的东西来在多个文件上提示。
答案1
rm
在 bash 中定义函数并检查参数数量。如果只有 1 个 arg,则它们运行command rm
以调用原始命令。否则打印警告。
就像是:
function rm()
{
if (( $# > 1 )); then
read -r -p "sure? [y/n] " response
case $response in
[yY])
command rm "$@"
;;
*)
echo "ignored"
;;
esac
else
command rm "$@"
fi
}
我的函数中需要改进的一件事是首先扫描所有参数,如果参数以 开头,-
则将该参数视为一个选项。所以该函数rm
可以像 一样处理输入rm -f 1.txt
。
答案2
ZFS
经常进行备份,如果您的文件系统是或,请使用快照(类似时间机器)btrfs
,训练您的手指使用正确的命令,但我建议避免更改rm
行为和语义。
这样做迟早会适得其反,就像令人讨厌的alias rm="rm -i"
......
在您的情况下,我建议的是,在运行交互式 shell 时,禁用并由将执行其原始工作的rm
自定义替换。rm
例如将这些行附加到您的.bashrc
rm() {
echo "rm disabled, use myRM instead"
}
alias myRM="command rm"
新功能带来的烦恼rm
将更有效地帮助您消除打字错误,并且您可能很快就会停止打字rm
。
虽然这个建议看起来适得其反,但我建议这样做的原因是,对于这样一个危险的 Unix 命令来说,习惯非标准的仍然有效的行为不会有任何风险。迟早,您将在没有黑客攻击的情况下登录帐户和/或另一个系统,并且您将删除文件而没有安全提示来保存它们。
另一方面,如果您习惯于通过键入myRM
来删除文件,那么在外国系统上执行此操作将是无害的。
最后,如果您仍然想重载该rm
命令,这里有一个简洁的方法:
rm() {
echo command rm $([ ${#} -gt 1 ] && echo \-i) "$@"
}