命令输出不会保存到 bash 中的变量

Command output doesn't save to variable in bash

提问人:tygo 提问时间:10/13/2023 最后编辑:tygo 更新时间:10/13/2023 访问量:60

问:

我需要将 的输出保存到一个变量,但无论我怎么尝试,该变量仍然是空白的。 是一个虚拟包,当在终端中运行它时,它会返回:apt-cache show debconf-2.0debconf-2.0

N: Can't select versions from package 'debconf-2.0' as it is purely virtual
N: No packages found

我需要在脚本中获取命令输出,以查看包是否是虚拟的,方法是通过-ing输出来查看它是否包含“is pure virtual”。grep

我用正常的方式尝试了一下:

cmd_output=$(apt-cache show debconf-2.0)
echo "$cmd_output"

但这什么也没输出。然后我尝试用以下命令获取 stderr 输出:2>&1

cmd_output=$(apt-cache show debconf-2.0 2>&1)
echo "$cmd_output"

它仍然不输出任何内容。另一个用于了解包是否为虚拟的命令也会有所帮助。

为了确认非虚拟包会向变量返回一些东西,我用普通包尝试了这个,它输出的信息很好。

cmd_output=$(apt-cache show nano 2>&1)
echo "$cmd_output"

返回:

Package: nano
Version: 7.2-1
Installed-Size: 2804
Maintainer: Jordi Mallace
...

请注意,这不是这个问题的重复。在问这个问题之前,我已经提到过我已经添加了 2>&1 以将 stderr 重定向到 stdout。询问后,我发现需要一个额外的 -q=0 参数。

bash debian io-重定向

评论

0赞 wjandrea 10/13/2023
我用谷歌搜索并找到了这些: 无法 grep apt-cache show 输出 - 问 Ubuntu,为什么 apt-cache 策略输出不是通过管道传输的? - Unix 和 Linux 堆栈交换。未来,请从自己的研究开始;请参阅如何询问和更多提示。apt-cache no output
1赞 tygo 10/13/2023
我不知道这个答案是特定于 apt-cache 的,我以为它是关于任何具有 stderr 的命令,所以我没有考虑搜索apt-cache no output
0赞 wjandrea 10/13/2023
不是重复的。OP 尝试了那里列出的技术,除非我遗漏了什么。
1赞 wjandrea 10/13/2023
啊,很公平。有了更多的经验,你就会知道你的前两次尝试中的任何一个都应该至少输出一些东西。恕我直言,输出任何东西都是非常奇怪的。(顺便说一句,我没有投反对票。apt-cache

答:

0赞 Cyrus 10/13/2023 #1

我建议:

cmd_output=$(apt-cache -q=0 show debconf-2.0 2>&1)
echo "$cmd_output"

输出:

N: Can't select versions from package 'debconf-2.0' as it is purely virtual
N: No packages found

请参见:https://unix.stackexchange.com/a/617079/74329