cd出错时显示错误并退出

时间:2017-10-31 10:44:31

标签: bash

当cd命令失败时,我想让我的脚本退出并显示一条消息。我通过以下方式尝试了这一点:

cd $foo || ( echo "Error xyz"; exit 1 )

然而,无论cd的成功与否,都会调用exit。当我输入以下内容时,它也不起作用,因为exit只退出子shell:

{{1}}

如何在不定义功能的情况下实现所需的行为?当然我可以将$(pwd)与$ foo进行比较,但这可能会导致关于符号链接和内容的问题。

2 个答案:

答案 0 :(得分:4)

您可以使用{ list; } compound command。命令列表在当前shell上下文中执行:

cd "$foo" || { echo "Error xyz"; exit 1; }

(注意需要使用尾随分号或换行符。)

bash中最常见的函数定义通常将此复合命令用于“函数体”:

f() { list; }

尽管可以使用任意复合命令为其身体定义bash个函数,例如:

f() ( list; )
f() (( $1 > 10 ))
f() [[ $1 != "test" ]]

甚至:

f() for i in {1..10}; do echo $i; done
f() case ... esac

答案 1 :(得分:1)

您可以使用if语句。在大多数情况下,它更具可读性,特别是如果您想要制作正确的错误消息:

if ! cd "${dir}" ; then
    echo "Failed to enter folder ${dir}"
    echo "Aborting"
    exit 1
fi