如何将shell脚本的输出存储到Unix中的变量?

时间:2012-06-08 11:51:04

标签: shell unix

我有一个shell脚本“script.sh”,当我在unix窗口中执行时,它输出为“success”或“Failed”。 现在我想将script.sh的输出存储到unix命令变量中。 say $a = {output of script.sh}

5 个答案:

答案 0 :(得分:72)

捕获输出pwd命令的两个简单示例:

$ b=$(pwd)
$ echo $b
/home/user1

$ a=`pwd`
$ echo $a
/home/user1

第一种方式是首选。请注意,=之后无法使用任何空格。

使用简短脚本的示例:

#!/bin/bash

echo "hi there"

然后:

$ ./so.sh
hi there
$ a=$(so.sh)
$ echo $a
hi there

通常,更灵活的方法是从命令返回退出值并将其用于进一步处理,但有时我们可能只想从命令中捕获简单输出。

答案 1 :(得分:4)

您应该重新编写脚本以返回值而不是输出它。而不是:

a=$( script.sh ) # Now a is a string, either "success" or "Failed"
case "$a" in
   success) echo script succeeded;;
   Failed) echo script failed;;
esac

你能做到:

if script.sh > /dev/null; then
    echo script succeeded
else
    echo script failed
fi

如果他们不需要解析输出,其他程序可以更简单地使用脚本。这是一个简单的改变。只需exit 0而不是打印successexit 1而不是打印Failed。当然,您也可以打印这些值以及以合理的返回值退出,这样包装脚本就可以灵活地使用脚本。

答案 2 :(得分:3)

假设您要存储echo命令的结果

echo hello   
x=$(echo hello)  
echo "$x",world!  

输出:

hello  
hello,world!

答案 3 :(得分:2)

export a=$(script.sh)

希望这会有所帮助。注意变量和=之间没有空格。回应输出

echo $a

答案 4 :(得分:0)

您需要使用前一个点启动脚本,这会将导出的变量放在当前环境中。

#!/bin/bash
...
export output="SUCCESS"

然后执行它

chmod +x /tmp/test.sh
. /tmp/test.sh

当您需要整个输出而不仅仅是单个值时,只需将输出放在变量中,就像其他答案所示