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

发布于 2025-01-11 23:50:45 字数 390 浏览 0 评论 0原文

在脚本中间,我有一个使用 ssh -R 80:localhost:8080 localhost.run 公开本地端口的命令,我需要在后台执行此命令,解析输出并保存它变成一个变量。

输出返回:

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

需要捕获这部分:

https://abc.lhrtunnel.link

结果如下:

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

In the middle of the script, I have a command that exposes the local port with ssh -R 80:localhost:8080 localhost.run I need to execute this command in the background, parse the output and save it into a variable.

The output returns:

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

Need to capture this part:

https://abc.lhrtunnel.link

As a result something like this:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

梦毁影碎の 2025-01-18 23:50:45

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

#! /bin/bash -p

hostname=$(ssh ...  \
            | sed -n 's/^.*tunneled with tls termination, //p')
declare -p hostname
  • 我假设您真的不想将命令置于后台生成输出。您只想以允许捕获和过滤其输出的方式运行它。有关如何使用“后台”进程进行并行的信息,请参阅如何从 bash 脚本并行运行多个程序?加工。
  • sed-n 选项意味着除非明确指示打印,否则它不会打印输入中的行。
  • s/^.*通过 tls 终止进行隧道传输,//p 适用于包含任何内容的输入行,后跟字符串通过 tls 终止进行隧道传输,。它会删除该行中直到该字符串末尾的所有内容并打印结果,希望该结果是您想要的 URL。
  • declare -p varname 是一种比使用 echo 更可靠、更有用的显示变量值的方法。

Try this Shellcheck-clean code:

#! /bin/bash -p

hostname=$(ssh ...  \
            | sed -n 's/^.*tunneled with tls termination, //p')
declare -p hostname
  • I'm assuming that you don't really want to background the command that generates the output. You just want to run it in a way that allows its output to be captured and filtered. See How do you run multiple programs in parallel from a bash script? for information about how "background" processes are used for parallel processing.
  • The -n option to sed means that it doesn't print lines from the input unless explicitly instructed to print.
  • s/^.*tunneled with tls termination, //p works on input lines that contain anything followed by the string tunneled with tls termination,. It deletes everything on the line up to the end of that string and prints the result, which hopefully will be the URL that you want.
  • declare -p varname is a much more reliable and useful way to show the value of a variable than using echo.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文