如何在后台执行 运行 命令并捕获输出

How to run command in background and also capture the output

在脚本的中间,我有一个暴露本地端口的命令 ssh -R 80:localhost:8080 localhost.run 我需要在后台执行这个命令,解析输出并将其保存到一个变量中。

输出returns:

Welcome to localhost.run!
...
abc.lhrtunnel.link tunneled with tls termination, https://abc.lhrtunnel.link

需要捕捉这部分:

https://abc.lhrtunnel.link

结果是这样的:

...
hostname=$(command)
echo $hostname
...

试试这个 Shellcheck-干净的代码:

#! /bin/bash -p

hostname=$(ssh ...  \
            | sed -n 's/^.*tunneled with tls termination, //p')
declare -p hostname
  • 我假设您真的不想将生成输出的命令置于后台。您只想以一种允许捕获和过滤其输出的方式 运行 它。有关如何使用“后台”进程进行并行处理的信息,请参阅 How do you run multiple programs in parallel from a bash script?
  • sed-n 选项意味着它不会从输入中打印行,除非明确指示打印。
  • s/^.*tunneled with tls termination, //p 适用于包含任何后跟字符串 tunneled with tls termination, 的输入行。它删除该行中直到该字符串末尾的所有内容并打印结果,希望它是您想要的 URL。
  • declare -p varnameecho.
  • 更可靠和有用的显示变量值的方法