shell 使用rm命令别名以避免计算单独的星号

py49o6xq  于 2023-03-09  发布在  Shell
关注(0)|答案(1)|浏览(181)

我想使用rm命令,这样当参数中有一个单独的星号时,它会返回一个错误。例如,如果我键入rm -f * .txt,那么这个命令就不应该执行(这样我已经无意中删除了几个文件)。您能告诉我最简单的方法是什么吗?

wtzytmuj

wtzytmuj1#

正如在注解中所讨论的,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

相关问题