将shell命令的输出存储在变量中

时间:2016-06-10 11:23:06

标签: bash shell

我试图在安装时通过shell脚本安装zfs我遇到了一些错误,所以要完全自动化,我想从错误本身安装版本。对于所有其他命令,我在一个变量中得到错误,但对于一个命令,它根本不会出现。我尝试了所有解决方案。

我需要输出此命令

sploutput=$(sudo dkms install -m spl -v $version)

echo $sploutput

echo $sploutput # This is giving nothing.

我尝试将它包裹在字符串周围,如"sploutput=$(sudo dkms install -m spl -v $version)"

echo "{sploutput}"

似乎没什么用。

2 个答案:

答案 0 :(得分:1)

sploutput=$(sudo dkms install -m spl -v $version)
echo $sploutput

可能是因为dkms install上的STDERR输出而不是STDOUT上的输出,并且您使用的是命令变量中的STDOUT输出。要同时采取这两种方法,您可以尝试:

sploutput=$(sudo dkms install -m spl -v $version 2>&1)

STDERR重定向到STDOUT

答案 1 :(得分:1)

根据ZMO的回答:尝试运行sudo dkms install -m spl -v $version

看,它又回来了什么? :STDERR或STDOUT。

如果失败,它将不会在sploutput中显示任何内容。 它只将STDOUT写入变量。

使用 2>& 1(将标准错误写入标准输出)。 您可以参考IO redirection

您可以使用以下内容:

sploutput=$(sudo dkms install -m spl -v $version 2>&1)
echo $sploutput