击。来自背景管道命令的标准输出

时间:2016-05-22 11:33:11

标签: bash background pipe stdout

我不知道如何恢复命令的标准"管道"在后台发布。我们来解释一下。我有这个命令:

/

我想发送所有后台以使用$!恢复pid,但是当我把&在任何地方,grep停止工作,iface var为空。任何的想法?谢谢。

1 个答案:

答案 0 :(得分:0)

如果您想在等待grep的输出时获得脚本仍在运行的状态,您可以使用pv之类的现有工具来打印进度表{{1}所以它不会干扰你捕获输出。

如果失败了,你可以编写一个比我想象的stderr解决方案慢的函数,但是会让你更新微调器,比如每行如

pv

或者你可以让你的后台命令写入临时文件并在

之后得到答案
get_monitor() {
    printf ' ' >&2 # to put a first char there to backspace the spinner over
    while read -r line; do
        if [[ $line =~ monitor ]]; then
            printf '%s\n' "$line"
        fi
        update_spinner
    done < <(airmon-ng start wlan0 2>/dev/null)
}

sp_ind=0
sp_chars='/-\|'
sp_num=${#sp_chars}
update_spinner() {
    printf '\b%s' "${sp_chars:sp_ind++%sp_num:1}" >&2
}

iface=$(get_monitor)

或者你甚至不需要它在变量中,因为很多东西都知道如何操作文件