这是 fsarchiver --version 中的错误吗

这是 fsarchiver --version 中的错误吗

我了解到,为了捕获 Unix 命令的输出,应该使用类似的东西

RESULT=$(command in question)

fsarchiver我想捕获变量的版本,RESULT因为前一个选项-zfsarchiver被弃用。应使用-Z版本 0.8.4(在 Ubuntu 18.04 LTS 下使用的版本)。为了在我的脚本中应用正确的压缩级别,它必须区分fsarchiver.

所以我尝试了这个:

$ RESULT=$(fsarchiver --version)
fsarchiver 0.6.22 (2016-02-13)
$ echo "${RESULT}"

$

所以这个只返回一个空行。不过,我可以确定这种方式的版本ls,因此我确信不会完全误解将命令的输出捕获到 bash 脚本中的变量:

$ RESULT=$(ls --version)
$ echo "${RESULT}"
ls (GNU coreutils) 8.25
Copyright © 2016 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Richard M. Stallman und David MacKenzie.
$

为什么在询问他们的版本时,在捕获结果方面的行为ls和行为有所不同?fsarchiver

答案1

fsarchiver将其版本信息写入其标准错误、ls其标准输出。哪一种是正确的,这是一个有争议的问题。看进度报告/日志信息属于 stderr 还是 stdout?进行一些相关讨论。ls在你的情况下可能是GNU版本,以及GNU编码标准强制将版本信息写入标准输出

您可以使用捕获版本

RESULT=$(fsarchiver --version 2>&1)

相关内容