如果您运行rm -r /var/some/dir/*
并且目录为空,则会返回错误
你怎么能抑制这个错误所以它不返回?
我在 linux bash 脚本中使用它
除了重定向到 stderr,您还可以使用-f
:
rm -rf /var/some/dir/*
来自man rm
:
-f, --force
ignore nonexistent files and arguments, never prompt
重定向标准错误:
rm -r /var/some/dir/* 2>/dev/null
由于您的问题提到[if] dir 为空,因此返回错误(因此假设目录存在),这是因为 glob/var/some/dir/*
不匹配任何内容,因此 bash (默认未设置nullglob
和)将逐字failglob
传递字符串。/var/some/dir/*
而且没有这样的文件,所以rm
抱怨。
由于您在 bash 脚本中使用它,我建议您按以下步骤操作:
shopt -s nullglob
shopt -u failglob
declare -a files=( /var/some/dir/* )
if (( ${#files[@]} )); then
rm -r -- "${files[@]}" # || error handling
fi
shopt -s nullglob
将使 glob 扩展为空,files
(并且因为nullglob
已设置,files
如果没有匹配项,则该数组为空),rm
它们。像这样继续操作将使您的脚本更加健壮,因为您将能够捕获rm
(与该|| error handling
部分)发生的真正错误,而不会将其与不匹配的 glob 发生的错误混淆。
这样做,您将不会启动带有不受控制的参数的随机命令。
评论。您获得的错误仅在目录为空时才会发生,这并不完全正确。当目录不包含任何文件(可能是隐藏文件除外)时,就会发生这种情况。如果您想真正从潜在的隐藏文件中清除目录,则必须shopt -s dotglob
使 glob 也匹配隐藏文件。