无法在bash

时间:2015-11-16 06:44:20

标签: bash process-substitution wpa-supplicant

使用进程替换,我们可以获得命令的每一行输出。

# 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)

以同样的方式,我想获得&#39; wpa_supplicant&#39;的标准输出。命令,同时丢弃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 个答案:

答案 0 :(得分:0)

最后我找到了答案here! 问题很简单......缓冲。使用stdbuf(和管道),原始代码将被修改如下。

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

'stdbuf -oL'使流线缓冲,因此我可以从运行过程中获取每一行。