47

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

4

5 回答 5

87

捕获输出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

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

于 2012-06-08T11:53:50.100 回答
5

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

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

输出:

hello  
hello,world!
于 2015-02-03T09:47:49.267 回答
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代替印刷success,而exit 1不是印刷Failed。当然,您也可以打印这些值以及以合理的返回值退出,以便包装脚本在如何使用脚本方面具有灵活性。

于 2012-06-08T12:17:23.267 回答
3
export a=$(script.sh)

希望这可以帮助。请注意,变量和 = 之间没有空格。回显输出

echo $a
于 2012-06-08T11:53:21.950 回答
0

您需要以前面的点开始脚本,这会将导出的变量放在当前环境中。

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

然后像这样执行

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

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

于 2012-06-08T11:55:08.370 回答