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