У мене те саме питання, але не можу його задати, оскільки це було б дублікат.
Прийнята відповідь, використовуючи вихід, не працює, коли сценарій трохи складніше. Якщо ви використовуєте фоновий процес для перевірки стану, вихід тільки виходить з цього процесу, оскільки він працює в підколонці. Щоб вбити скрипт, ви мусите його явно вбити (принаймні, це єдиний спосіб, який я знаю).
Ось невеликий сценарій, як це зробити:
#!/bin/bash
boom() {
while true; do sleep 1.2; echo boom; done
}
f() {
echo Hello
N=0
while
((N++ <10))
do
sleep 1
echo $N
# ((N > 5)) && exit 4 # does not work
((N > 5)) && { kill -9 $$; exit 5; } # works
done
}
boom &
f &
while true; do sleep 0.5; echo beep; done
Це краща відповідь, але все ще неповна. Я дійсно не знаю, як позбутися частини стріли .
1послідовно. Якщо сценарій призначений для запуску іншого сценарію, ви можете визначити свій власний набір коду статусу з конкретним значенням. Наприклад,1== тести не вдалися,2== компіляція не вдалася. Якщо сценарій є частиною чогось іншого, вам може знадобитися відкоригувати коди, щоб вони відповідали практикам, які використовуються там. Наприклад, коли частина тестового набору працює за допомогою автоматичного коду, код77використовується для позначення пропущеного тесту.