Интересно, почему этот скрипт продолжает работать даже при явной команде выхода.
У меня есть два файла:
file1.txt
следующего содержания:
aaaaaa bbbbbb cccccc dddddd eeeeee ffffff gggggg
file2.txt
следующего содержания:
111111 aaaaaa 222222 333333 ffffff 444444
Сценарий (test.sh
) таков: два вложенных цикла проверяют, содержит ли какая-либо строка первого файла какую-либо строку второго файла. Если он находит совпадение, он прерывается.
#!/bin/bash
path=`dirname $0`
cat $path/file1.txt | while read line
do
echo $line
cat $RUTA/file2.txt | while read another
do
if [ ! -z "`echo $line | grep -i $another`" ]; then
echo "!!!!!!!!!!"
exit 0
fi
done
done
Я получаю следующий вывод, даже если он должен выйти после печати первого !!!!!!!!!!
:
aaaaaa !!!!!!!!!! bbbbbb cccccc dddddd eeeeee ffffff !!!!!!!!!! gggggg
Разве exit
не должно полностью завершать выполнение скрипта?
while
. Канал запускает другой подпроцесс (оболочку) дляwhile
, поэтомуexit
внутриwhile
выходит из этой оболочки, а вы возвращаетесь к исходному. - person lurker   schedule 21.08.2013