Linux 在命令行语法上不返回任何错误
如果运行Linux 在命令行语法上不返回任何错误,linux,bash,shell,Linux,Bash,Shell,如果运行rm-r/var/some/dir/*且dir为空,则返回一个错误 如何抑制此错误,使其不返回 我在linux bash脚本中使用它重定向stderr: rm -r /var/some/dir/* 2>/dev/null 除了重定向到stderr,您还可以使用-f: rm -rf /var/some/dir/* 从人力资源部: -f, --force ignore nonexistent files and arguments, never prompt
rm-r/var/some/dir/*
且dir为空,则返回一个错误
如何抑制此错误,使其不返回
我在linux bash脚本中使用它重定向stderr:
rm -r /var/some/dir/* 2>/dev/null
除了重定向到stderr,您还可以使用
-f
:
rm -rf /var/some/dir/*
从人力资源部:
-f, --force
ignore nonexistent files and arguments, never prompt
由于您的问题提到[if]dir为空,因此返回一个错误(假设目录存在),这是因为glob/var/some/dir/*
不匹配,因此bash(默认为unsetnullglob
和failglob
)将逐字传递字符串/var/some/dir/*
。而且没有这样的文件,所以rm
投诉
由于您在bash脚本中使用了此选项,因此我建议您按照以下步骤进行操作:
shopt-s nullglob
shopt-u failglob
declare-a files=(/var/some/dir/*)
如果(${#files[@]}));然后
rm-r--“${files[@]}”错误处理
fi
- 如果不存在匹配的文件,
shopt-s nullglob
将使glob扩展为零
- 将匹配的文件放入数组
文件
(由于设置了空glob
,因此如果没有匹配项,则数组文件
为空)
- 如果有匹配的文件,则
rm
这样做将使您的脚本更加健壮,因为您将能够捕获rm
中发生的真实错误(使用| |错误处理
部分),并且不会将其与不匹配的全局错误混淆
这样做,您将不会启动带有不受控制参数的随机命令
备注。您获得的错误仅在目录为空时发生,这一点并不完全正确。当目录不包含任何文件(可能隐藏的文件除外)时,会发生此错误。如果要真正从潜在的隐藏文件中清除目录,则必须shopt-s dotlob
,以便glob也匹配隐藏文件