当给出多个文件时会提示“rm”

当给出多个文件时会提示“rm”

由于某种原因,我的手指记忆已转换mvrm.在我设法重新训练这些手指之前,我怎么可能有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) "$@"
}

相关内容