使用进程替换,我们可以获得命令的每一行输出。
# 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
错误是什么?任何帮助将不胜感激。
答案 0 :(得分:0)
最后我找到了答案here! 问题很简单......缓冲。使用stdbuf(和管道),原始代码将被修改如下。
stdbuf -oL wpa_supplicant -iwlan1 -Dwext -c${MY_CONFIG_FILE} | while read line; do
echo "! $line"
done
'stdbuf -oL'使流线缓冲,因此我可以从运行过程中获取每一行。