Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在命令行语法上不返回任何错误_Linux_Bash_Shell - Fatal编程技术网

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(默认为unset
nullglob
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也匹配隐藏文件