Следующий тестовый скрипт имеет проблему. Когда я добавляю строку (sleep 5 ) & в сценарий, тогда цикл "пока читается" не читает все строки из файла, а только печатает первую строку.

Но когда я удаляю ( sleep 5 ) & из скрипта, тогда скрипт печатает все строки, как определено в файле.

Почему ( sleep 5 ) & вызывает это?

И как решить проблему? Я хочу создать новый процесс (для которого sleep является лишь примером) в цикле while:

$ more test 
#!/bin/ksh  
while read -r line ; do
    echo Read a line:
    echo $line

    ( sleep 5 )&
    RESULT=$!
    echo Started background sleep with process id $RESULT

    sleep 1
    echo Slept for a second

    kill $RESULT 
    echo Killed background sleep with process id $RESULT
done < file
echo Completed 

На моем Linux, когда используется следующее содержимое file:

$ more file 
123 aaa 
234 bbb 
556 ccc

... работает ./test просто дает мне:

Read a line:
123 aaa
Started background sleep with process id 4181
Slept for a second 
Killed background sleep with process id 4181
Completed

1 ответ1

1

Из журнала изменений Ksh для ksh93s:

06-10-23 Ошибка, при которой значение $! было затронуто фоновое задание, запущенное из подоболочки, было исправлено.

Если ваша версия ksh старше этой (вы должны указать версию в своем вопросе!), Возможно, вы наблюдаете эту ошибку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .