我有一个shell脚本“script.sh”,当我在unix窗口中执行时,它输出为“success”或“Failed”。
现在我想将script.sh的输出存储到unix命令变量中。 say $a = {output of script.sh}
答案 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
而不是打印success
和exit 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
当您需要整个输出而不仅仅是单个值时,只需将输出放在变量中,就像其他答案所示