LINUX.ORG.RU

exit не завершает сценарий bash


0

0

Доброго времени суток!

есть конструкция на баше
......
cat /etc/ppp/users | awk '$1!~/#/ {print $1}' | while read user1
do
if [ «$vpnname» = «$user1» ]
then
$HOMEBILLING/firewall-rules.up
#sleep 20
    exit 0
fi
done
.......
Проблема в том, что «exit 0» срабатывает как break, т.е. цикл прерывается и выполняются команды после done. Хотя я ожидаю, что выполнение скрипта прекратится. Возможно проблема в том, что вызывается скрипт firewall-rules.up?
Прошу помочь - как все же прекратить выполнение скрипта в теле условия?

твой «while read user1» интерпретируется другим shell интерпретатором нежели cat /etc/ppp/users.

Дальше решай проблему сам:)

Devix ()
Ответ на: комментарий от Devix

Считай что твой «while read user1» это отдельная програмка

Devix ()
Ответ на: комментарий от Devix

не совсем «отдельная програмка» - всё хуже :) Это множество «программок», запускаемых одна за другой столько раз, сколько крутится цикл.

Здесь можно через «for .. in» побаловаться, типа так:

for user in $(awk '$1!~/#/ {print $1}' /etc/ppp/users); do
[ «$vpnname» = «$user1» ] && {
$HOMEBILLING/firewall-rules.up
#sleep 20
exit 0
}
done

Slavaz ★★★★★ ()

Можно вместо «exit 0» использовать, допустим «exit 55», а после «done» написать [ $? == 55 ] && exit 0.

mky ★★★★★ ()
Ответ на: комментарий от Slavaz

Никакое это не множество программ. Запускается другой интерпретатор в новом потоке или в новом процессе в зависимости от реализации шелл интерпретатора и интерпретирует цикл while.

Devix ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.