等待前台进程发出字符串,然后发送到后台

等待前台进程发出字符串,然后发送到后台

使用bash脚本,我尝试启动一个进程,等待它写入​​特定字符串stdout(即'Server Initialized'),然后将其发送到后台并继续执行脚本。更好的是,如果'Server Initialized'打印一次,过程输出将被忽略(重定向到/dev/null?)

作为一名黑客,我现在等待 10 秒钟并假设服务器已经启动。

( ./long_running_process ) > /dev/null 2>&1 &
# sleep 10
echo 'I run after long_running_process prints "Server Initialized"

如果一段时间后,搜索字符串没有出现,则奖励积分,然后退出并显示错误状态代码。

答案1

这个想法是在后台运行服务器,然后只要出现预期的字符串'Something 3''Server Initialized'在您的情况下)就 grep 其输出

#!/bin/bash

main()  
{
    output=$(mktemp "${TMPDIR:-/tmp/}$(basename $0).XXX")
    server &> $output &
    server_pid=$!
    echo "Server pid: $server_pid"
    echo "Output: $output"
    echo "Wait:"
    until grep -q -i 'Something 3' $output
    do       
      if ! ps $server_pid > /dev/null 
      then
        echo "The server died" >&2
        exit 1
      fi
      echo -n "."
      sleep 1
    done
    echo 
    echo "Server is running!" 
}

server() 
{       
    i=0
    while true; do
      let i++
      echo "Something $i"  
      sleep 1
    done
}

main "$@"

相关内容