Bash 显示错误并在cd带错误退出时退出

Bash 显示错误并在cd带错误退出时退出,bash,Bash,当cd命令失败时,我想让脚本退出并显示一条消息。我尝试了以下方法: cd $foo || echo "Error xyz"; exit 1 但是,不管cd是否成功,都会调用exit。当我键入以下内容时,它也不工作,因为exit只退出子shell: cd $foo || ( echo "Error xyz"; exit 1 ) 如何在不定义函数的情况下实现所需的行为?当然,我可以将$(pwd)与$foo进行比较,但这可能会导致符号链接等方面的问题。您可以使用。命令列表在当前shell上下文中执

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

cd $foo || echo "Error xyz"; exit 1
但是,不管cd是否成功,都会调用exit。当我键入以下内容时,它也不工作,因为exit只退出子shell:

cd $foo || ( echo "Error xyz"; exit 1 )
如何在不定义函数的情况下实现所需的行为?当然,我可以将$(pwd)与$foo进行比较,但这可能会导致符号链接等方面的问题。

您可以使用。命令列表在当前shell上下文中执行:

cd "$foo" || { echo "Error xyz"; exit 1; }
(注意,后面的分号或换行符是必需的。)


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

尽管如此,
bash
函数可以通过其主体的任何复合命令来定义,例如:

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


您可以只使用if语句。在大多数情况下,它更具可读性,特别是如果您希望生成正确的错误消息:

if ! cd "${dir}" ; then
    echo "Failed to enter folder ${dir}"
    echo "Aborting"
    exit 1
fi
f() for i in {1..10}; do echo $i; done
f() case ... esac
if ! cd "${dir}" ; then
    echo "Failed to enter folder ${dir}"
    echo "Aborting"
    exit 1
fi