2015-11-16 3 views
0

Используя подстановку процессов, мы можем получить каждую строку вывода команды.Не удается прочитать строки из запущенного процесса в 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) 

К тому же, как выше, я хочу, чтобы получить выход стандартного вывода команды «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 

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

+0

Я не знаю, в чем проблема, но замена процесса абсолютно бессмысленна. Просто отправьте stdout на 'while'. – 4ae1e1

ответ

0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^