我有一个 shell 脚本“script.sh”,当我在 unix 窗口中执行时,它会输出“成功”或“失败”。现在我想将 script.sh 的输出存储到一个 unix 命令变量中。say $a = {output of script.sh}
问问题
192517 次
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 回答