繁体   English   中英

命令行语法不返回错误

[英]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(默认未设置nullglobfailglob )将通过字符串/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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM