2017-08-03 81 views
1

我在尝试使用以下1内胆bash shell命令来发出自定义错误消息。我没有收到“errorMessage”var集。但是,如果我单独运行该命令,我可以将错误消息捕获到$ errorMessage变量中。 我错过了什么?Linux Bash Shell自定义错误消息

命令:

[ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}" 

试验/输出:

$ [ "errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1)" ] && echo "Something Went Wrong; Error is: ${errorMessage}" 
Something Went Wrong; Error is: 
$ echo $errorMessage 

$ errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) 
$ echo $errorMessage 
mkdir: cannot create directory `/path': Permission denied 
+0

顺便说一句,在这个问题上,这是一个相当有问题的问题,对于新来的人来说,情况往往是这样。感谢您花时间帮助您轻松解决问题! –

回答

2

[是命名test命令;当没有指定要运行的单个测试的参数时,缺省值为-n(测试字符串是否为空)。此代码正在测试字符串"errorMessage="(可能带有来自mkdir的stderr的后缀)是否为空;因为它包含一个固定的前缀,它将从不为空,无论是否发生任何错误。

如果要真正地赋值给变量,那反而会看起来像:

errorMessage=$(mkdir -p /path/to/restricted/folder 2>&1) \ 
    || echo "Something Went Wrong; Error is: ${errorMessage}" 

这是检查退出状态的mkdir和运行echo应该说是非零。

+0

太棒了!这对我行得通。 – MaxGrand