我需要启动一个服务器类型的程序(http-server),它在终端中运行,并在准备好时输出它正在使用的端口。我想等到显示端口号,然后运行另一个命令,该命令也将是服务器类型的程序(运行并接受用户交互)
我几乎可以使用它
http-server | (grep -m 1 "Server runing"; interactiveProgram)
InteractiveProgram 将在 grep 匹配第一行后启动,但不会是交互式的)
答案1
我怀疑问题在于
http-server | (grep -m 1 "Server running"; interactiveProgram)
interactiveProgram
的标准输入未连接到终端,而是从 的http-server
标准输出通过管道传输(一旦grep
完成)。
http-server | (grep -m 1 "Server running"; interactiveProgram < /dev/tty)
应该做你想做的事。
答案2
如果您将其作为管道的一部分运行,则标准输入将不会与终端连接,正如 @Stephen Kitt 已经说过的那样。但是如果你之后运行它,它在 http-server 退出之前不会运行。
解决方法是使用while
-loop 并grep
每行调用一次:
http-server | while read line; do
echo "$line" | grep "Server running" && { interactiveProgram; break; }
done