加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-16 01:56:40 所属栏目:安全 来源:网络整理
导读:我不知道如何恢复在后台启动的“管道”命令的标准输出.我们来解释一下.我有这个命令: iface=$(airmon-ng start wlan0 2 /dev/null | grep monitor) 我想发送所有背景以使用$!恢复pid,但是当我把在任何地方,grep停止工作,iface var为空.任何的想法?谢谢.
我不知道如何恢复在后台启动的“管道”命令的标准输出.我们来解释一下.我有这个命令:

iface=$(airmon-ng start wlan0 2> /dev/null | grep monitor)

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

解决方法

如果你想在等待grep的输出时获得脚本仍在运行的状态,你可以使用现有的工具,比如pv,它会将进度表打印到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 '%sn' "$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)

或者你可以让你的后台命令写入临时文件并在之后得到答案

airmon-ng start wlan2 2>/dev/null >/tmp/airmon_out &
# your spinner stuff
iface=$(cat /tmp/airmon_out)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读