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

ple*_*and 10 bash process shell-script

使用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"
Run Code Online (Sandbox Code Playgroud)

如果在一些超时后搜索字符串没有出现,则奖励积分,然后以错误状态代码退出。

Boz*_*zak 10

这个想法是在后台运行服务器,然后只要出现预期的字符串'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 "$@"
Run Code Online (Sandbox Code Playgroud)