プログラムを続行させるサブシェルでexitを呼び出していると思います。
#!/bin/bash
grep str file | while read line
do
exit 0
done
echo "String that should not really show up!"
メインプログラムから抜け出す方法はありますか?
プログラムを続行させるサブシェルでexitを呼び出していると思います。
#!/bin/bash
grep str file | while read line
do
exit 0
done
echo "String that should not really show up!"
メインプログラムから抜け出す方法はありますか?
サブシェルを回避するために、またはむしろ、ループgrep
ではなくサブシェルの内部を実行するために、簡単に再構築することができます。while read
#!/bin/bash
while read line; do
exit 1
done < <(grep str file)
これ<()
はbashのみの構文であり、では機能しないことに注意してください/bin/sh
。
一般に、生成されたサブシェルの戻りコードをチェックして、メインメインを続行する必要があるかどうかを確認できます。
例えば:
#!/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
。
サブシェルからシェルに信号を送信することで、シェルを「終了」できますexit 0
。kill -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