Вы можете сделать:
#!/bin/bash
./"b.sh" 2>&1 | { while read -t 3 line; do
echo "$line" >> log.txt
done; pkill -g 0; } &
wait $!
Обратите внимание, что в вашем примере ваш скрипт не вызывает b. sh, но использует его. Это решение вызывает b. sh. Это кажется более чистым, поскольку чтение выходных данных сценария является действительно странным поведением.
Но учтите, что если b.sh
вызывает какую-то долго работающую программу, которая генерирует большой объем вывода, но делает это медленно, вы будете несомненно, столкнуться с проблемами буферизации. Долгосрочная программа, скорее всего, будет блокировать буферизацию своих выходных данных, поэтому, хотя она периодически генерирует данные во свои внутренние буферы, read
в то время как l oop не увидит ее и может преждевременно отключиться.