You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现为rm -rf命令添加确认提示的Bash函数

解决rm -rf命令的自定义确认提示问题

你的脚本存在几个关键问题导致无法正常运行:

  1. 参数判断逻辑错误:rm的选项可能是拆分形式(比如-r -f)或合并形式(-rf),你只判断了$1 = "-rf"的情况,无法覆盖拆分输入场景;且-eq是数字比较运算符,字符串比较需用=。
  2. 递归调用死循环:自定义函数内直接写rm -rf "$@"会再次触发你定义的rm()函数,导致无限循环,必须用command rm调用系统原生rm命令。
  3. 变量引用不规范:判断变量时未给变量加引号(比如[ ans -eq "yes" ]应改为[ "$ans" = "yes" ]),容易因空值或特殊字符引发错误。

正确实现脚本

将以下代码添加到~/.bashrc文件中:

rm() {
    # 标记是否同时包含-r和-f选项
    local has_r=false
    local has_f=false

    # 遍历所有参数,检查选项
    for arg in "$@"; do
        if [[ "$arg" == "-r" || "$arg" == "--recursive" ]]; then
            has_r=true
        elif [[ "$arg" == "-f" || "$arg" == "--force" ]]; then
            has_f=true
        elif [[ "$arg" == -* ]]; then
            # 处理合并选项,比如-rf、-fr等
            if [[ "$arg" == *r* ]]; then
                has_r=true
            fi
            if [[ "$arg" == *f* ]]; then
                has_f=true
            fi
        fi
    done

    # 同时包含-r和-f时,弹出确认提示
    if $has_r && $has_f; then
        read -p "Do you really want to delete with rm -rf? Type 'yes' to confirm: " ans
        # 若需忽略大小写,可改为[[ "${ans,,}" == "yes" ]]
        if [[ "$ans" != "yes" ]]; then
            echo "Deletion canceled."
            return 0
        fi
    fi

    # 执行原生rm命令
    command rm "$@"
}

说明

  • 遍历所有参数,覆盖-r -f、-rf、-fr、--recursive --force等所有可能的输入形式;
  • 用command rm避免递归调用自定义函数;
  • 变量引用均加双引号,防止空格或特殊字符导致的错误;
  • 可根据需求调整确认字符串的匹配规则(比如支持大小写不敏感)。

修改完成后,执行source ~/.bashrc让配置立即生效,之后输入rm -rf相关命令就会弹出确认提示。

内容的提问来源于stack exchange,提问作者user20688587

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 22:17:06