我相信我在子shell中调用exit会导致我的程序继续:
#!/bin/bash
grep str file | while read line
do
exit 0
done
echo "String that should not really show up!"
知道如何摆脱主程序吗?
答案 0 :(得分:3)
您可以轻松重组以避免子shell - 或者更确切地说,在子shell中运行grep
而不是while read
循环。
#!/bin/bash
while read line; do
exit 1
done < <(grep str file)
请注意,<()
是仅限bash的语法,不适用于/bin/sh
。
答案 1 :(得分:1)
通常,您可以检查生成的子shell的返回码,以查看主要的main是否应该继续。
例如:
#!/bin/bash
grep str file | while read line
do
exit 1
done
if [[ $? == 1 ]]; then
exit 1
fi
echo "String that should not really show up!"
不会打印邮件,因为子shell已退出代码1
。
答案 2 :(得分:0)
你可以退出&#34;你的shell通过从子shell发送信号给你的shell:用exit 0
kill -1 $PPID
但是我不推荐这种方法。我建议你的子shell返回一个特殊的含义值,比如exit 1
#!/bin/bash
grep str file | while read line
do
exit 1
done
exit 0
那么您可以通过$?
检查子贝壳的返回值喜欢subshell.sh ;if [[ $? == 1 ]]; then exit 1 ;fi
或只是subshell.sh || exit