gpt4 book ai didi

bash - 如何在变量中捕获 stderr 并通过管道传输 stdout

转载 作者:行者123 更新时间:2023-11-29 09:12:52 25 4
gpt4 key购买 nike

我正在尝试将 curl 响应的 header (来自 stderr)存储在一个变量中,并将正文(来自 stdout)通过管道传输到 grep。

这是我目前的尝试:

{
HEADERS=$(curl -vs $URL 2>&1 1>&3-)
echo "$HEADERS"
} 3>&1 | grep "regex" >> filename
echo "$HEADERS"

当我使用 bash -x script.sh 运行脚本时,我看到 + HEADERS='...' 具有预期的输出,但我无法访问他们在内联组内外使用 $HEADERS"$HEADERS"

正文按预期通过了管道。

最佳答案

作为anubhava正确diagnosed ,问题是您在子进程中设置 HEADERS,而不是在 shell 的主进程中。

您可以使用 Bash 的 process substitution为避免此问题,不使用在 shell 中断时必须清理的临时文件:

HEADERS=""
{ HEADERS=$(curl -vs "$URL" 2>&1 1>&3-); } 3> >(grep "regex" > file)
echo "$HEADERS"

grep 子进程被进程替换隐藏了。 3>>(…) 之间的空格是必需的。

关于bash - 如何在变量中捕获 stderr 并通过管道传输 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36765627/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com