Linux:Bash:mkdir返回什么

Tu *_*ang 6 linux bash mkdir

我想在运行mkdir创建一个dir时写一个简单的检查.首先,它将检查dir是否已经存在,如果存在,它将跳过.如果dir不存在,它将运行mkdir,如果mkdir失败(意味着脚本无法创建dir,因为它没有足够的权限),它将终止.

这就是我写的:

if [ ! -d "$FINALPATH" ]; then
    if [[ `mkdir -p "$FINALPATH"` -ne 0 ]]; then
        echo "\nCannot create folder at $FOLDERPATH. Dying ..."
        exit 1
    fi
fi
Run Code Online (Sandbox Code Playgroud)

但是,第二个if似乎没有正常工作(我将0作为成功的mkdir的返回值).那么如何正确写出第二个if?mkdir在成功和失败后会回报什么?

Owe*_*wen 16

运行的结果

`mkdir -p "$FINALPATH"`
Run Code Online (Sandbox Code Playgroud)

不是返回码,而是程序的输出.$?返回码.所以你可以做到

if mkdir -p "$FINALPATH" ; then
    # success
else
    echo Failure
fi
Run Code Online (Sandbox Code Playgroud)

要么

mkdir -p "$FINALPATH"
if [ $? -ne 0 ] ; then
    echo Failure
fi
Run Code Online (Sandbox Code Playgroud)

  • @Tanner:就像任何其他上下文一样,您可以使用分号或换行符。`命令1;command2` 就像 `command1 \n command2` (我希望我可以在评论中做真正的换行符!)。“then”一词必须位于行首或“;”之后才能被识别;否则它只是一个单词(如“echo then”)。 (2认同)