Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.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
Bash:如何测试mkdir命令的失败?_Bash_Unit Testing_Exit Code - Fatal编程技术网

Bash:如何测试mkdir命令的失败?

Bash:如何测试mkdir命令的失败?,bash,unit-testing,exit-code,Bash,Unit Testing,Exit Code,我正在编写一个bash脚本,希望在其中执行健壮的错误检查 使其失效的mv退出状态代码很容易模拟失效。你所要做的就是移动一个不存在的文件,但它失败了 然而,使用mkdir我想模拟它失败。mkdir可能由于各种原因、磁盘问题或权限不足而失败,但不确定如何模拟失败。mkdir将在目录已经存在的情况下失败(除非您使用-p),并返回一个错误代码1(在我的系统上),因此请先创建目录,在您自己的系统上进行测试。(尽管我认为这是所有shell的标准配置。) 或者,将父目录设置为只读。只需使用 mkdir you

我正在编写一个bash脚本,希望在其中执行健壮的错误检查

使其失效的
mv
退出状态代码很容易模拟失效。你所要做的就是移动一个不存在的文件,但它失败了


然而,使用
mkdir
我想模拟它失败。mkdir可能由于各种原因、磁盘问题或权限不足而失败,但不确定如何模拟失败。

mkdir将在目录已经存在的情况下失败(除非您使用-p),并返回一个错误代码
1
(在我的系统上),因此请先创建目录,在您自己的系统上进行测试。(尽管我认为这是所有shell的标准配置。)

或者,将父目录设置为只读。

只需使用

mkdir your_directory/
if [ $? -ne 0 ] ; then
    echo "fatal"
else
    echo "success"
fi
其中,
$?
表示上次执行的命令的退出代码


要创建父目录,当这些目录不存在时,请在脚本中运行
mkdir-p parent\u directory/your\u directory/

,您还可以检查新目录

mkdir -p new_dir ;

if [ -d new_dir ]
  cd new_dir && ...... anything else you want .
else 
  echo "error in directory creation ";
  exit 2 ;
fi 


如果您很懒,在脚本开头设置一个简单的
set-e
就足够了。通常,您只想打印一个错误,然后在出现问题时终止

不是你想要的,也许是你想要的

if ! mkdir your_directory 2>/dev/null; then
    print_error
    exit
fi
mkdir your_directory 2>/dev/null || { print_error; exit; }