当cd命令失败时,我想让我的脚本退出并显示一条消息。我通过以下方式尝试了这一点:
cd $foo || ( echo "Error xyz"; exit 1 )
然而,无论cd的成功与否,都会调用exit。当我输入以下内容时,它也不起作用,因为exit只退出子shell:
{{1}}
如何在不定义功能的情况下实现所需的行为?当然我可以将$(pwd)与$ foo进行比较,但这可能会导致关于符号链接和内容的问题。
答案 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