0

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

# 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”命令的标准输出输出,同时丢弃标准错误。但是屏幕上什么都看不到!

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

错误是什么?任何帮助,将不胜感激。

4

1 回答 1

0

终于在这里找到了答案! 问题很简单……缓冲。使用 stdbuf(和管道),原始代码将被修改如下。

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

'stdbuf -oL' 使流线缓冲,所以我可以从正在运行的进程中获取每一行。

于 2015-11-16T14:23:51.680 回答