Не в состоянии читать строки из запущенного процесса в Bash

Используя подстановку процесса, мы можем получить все строки вывода команды.

# Echoes every seconds using process substitution
while read line; do
   echo $line
done < <(for i in $(seq 1 10); do echo $i && sleep 1; done)

Таким же образом, я хочу получить вывод stdout команды 'wpa_supplicant', отбрасывая stderr. Но на экране ничего не видно!

while read line; do
    echo $line 
done < <(wpa_supplicant -Dwext -iwlan1 -c${MY_CONFIG_FILE} 2> /dev/null)

Я подтвердил, что при вводе этой же команды в командной строке выводится нормально.

$ wpa_supplicant -Dwext -iwlan1 -c${MY_CONFIG_FILE} 2> /dev/null

В чем ошибка? Любая помощь будет оценена.

1 ответ

Решение

Наконец я нашел ответ здесь! Проблема была проста... буферизация. Используя stdbuf (и трубопровод), исходный код будет изменен, как показано ниже.

stdbuf -oL wpa_supplicant -iwlan1 -Dwext -c${MY_CONFIG_FILE} | while read line; do
    echo "! $line"
done

'stdbuf -oL' делает буферизованную строку потока, поэтому я могу получить каждую строку из запущенного процесса.

Другие вопросы по тегам