如何在 UNIX 中将命令输出一致地记录在变量中

How to consistently record command output in a variable in UNIX

在某些情况下,我在控制台输出中看到的内容与我在重定向后记录的内容不同。我在 Linux/bash 上看到了这个,但这个例子是 ksh/OpenBSD。有解决办法吗?

例如:

# pfctl -ttable -Ttest 123.123.123.123 > result.txt
0/1 addresses match.
# more result.txt
result.txt (END)

换句话说,“0/1 地址匹配”。打印在控制台上,但我终生无法将它放入文件、变量或任何东西中。我已经使用了 $() 和 > 这适用于大多数命令,但时不时会有一个命令在屏幕上吐出一些东西,但我通过 redirect/pipe 什么也得不到。我希望有人能阐明这个特点。

所以再对比一下:

# OUTP=$(pfctl -tscanners -Ttest 123.123.123.123)
0/1 addresses match.
# echo $OUTP

#

(没有回应,变量不保存控制台输出)与此:

# OUTP=$(date)
# echo $OUTP
Sun Aug 21 08:33:37 PDT 2016
#

(变量包含整个控制台输出)

再次感谢您的帮助。

您的命令有 2 个不同的输出流。
您需要将第二个 (stderr) 重定向到第一个。

pfctl -ttable -Ttest 123.123.123.123 > result.txt 2>&1