从子shell退出shell

时间:2012-11-10 01:02:58

标签: shell

我相信我在子shell中调用exit会导致我的程序继续:

#!/bin/bash
grep str file | while read line
do
        exit 0
done
echo "String that should not really show up!"

知道如何摆脱主程序吗?

3 个答案:

答案 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