[英]return no errors on command line syntax
如果运行rm -r /var/some/dir/*
并且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也将与隐藏文件匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.