别名 rm 命令以避免评估单独的星号

问题描述 投票:0回答:1

我想使用

rm
命令,以便在其参数中有单独的星号时返回错误。例如,如果我输入
rm -f * .txt 
,那么这个命令不应该被执行(这样我已经无意中删除了几个文件)。你能帮我最简单的方法是什么吗?

bash shell alias rm
1个回答
0
投票

正如评论中所讨论的,

rm
别名或函数通常无法检测它是否使用由 shell 扩展为参数列表的
*
运行。这个 Bash 函数演示了一种可能的替代方法来帮助您解决问题:

function rm
{
    local arg
    for arg in "$@"; do
        if [[ $arg != -* && ! -L $arg && ! -e $arg ]]; then
            printf 'rm: ERROR: argument does not exist: %q\n' "$arg" >&2
            printf '    Nothing is being removed\n' >&2
            return 1
        fi
    done

    command rm "$@"
}
  • 函数检查它的所有参数。如果其中任何一个不是一个选项,不是符号链接,也不是普通文件、目录或特殊文件,它会打印一条错误消息并立即返回非零状态。对符号链接的显式检查是必要的,因为指向不存在路径的符号链接无法通过
    -e
    测试。例如,如果使用
    rm * .txt
    运行,它不会删除任何内容,因为它会检测到一个不存在的
    .txt
    文件。
  • 如果没有任何参数未通过检查,它将在完整的参数列表上运行真正的
    rm
© www.soinside.com 2019 - 2024. All rights reserved.