2

プログラムを続行させるサブシェルでexitを呼び出していると思います。

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

メインプログラムから抜け出す方法はありますか?

4

3 に答える 3

4

サブシェルを回避するために、またはむしろ、ループgrepではなくサブシェルの内部を実行するために、簡単に再構築することができます。while read

#!/bin/bash
while read line; do
  exit 1
done < <(grep str file)

これ<()はbashのみの構文であり、では機能しないことに注意してください/bin/sh

于 2012-11-10T01:14:40.440 に答える
1

一般に、生成されたサブシェルの戻りコードをチェックして、メインメインを続行する必要があるかどうかを確認できます。

例えば:

#!/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!"

サブシェルがコードで終了したため、メッセージを出力しません1

于 2012-11-10T01:13:44.867 に答える
0

サブシェルからシェルに信号を送信することで、シェルを「終了」できますexit 0kill -1 $PPID

ただし、このアプローチはお勧めしません。サブシェルに、次のような特別な意味の値を返すことをお勧めします。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

于 2012-11-10T01:18:30.057 に答える