【发布时间】:2012-06-08 11:51:03
【问题描述】:
我有一个 shell 脚本“script.sh”,当我在 unix 窗口中执行时,它会输出“成功”或“失败”。
现在我想将 script.sh 的输出存储到一个 unix 命令变量中。 say $a = {output of script.sh}
【问题讨论】:
我有一个 shell 脚本“script.sh”,当我在 unix 窗口中执行时,它会输出“成功”或“失败”。
现在我想将 script.sh 的输出存储到一个 unix 命令变量中。 say $a = {output of script.sh}
【问题讨论】:
两个简单的例子来捕获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
一般来说,更灵活的方法是从命令返回退出值并将其用于进一步处理,尽管有时我们可能只想捕获命令的简单输出。
【讨论】:
script.sh 会存储 script.sh 的输出吗?
假设你想存储一个 echo 命令的结果
echo hello
x=$(echo hello)
echo "$x",world!
输出:
hello
hello,world!
【讨论】:
您可能应该重新编写脚本以返回一个值而不是输出它。而不是:
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。当然,您也可以打印这些值并以合理的返回值退出,这样包装脚本就可以灵活地处理脚本。
【讨论】:
success 和failed(注意大小写一致),否则事情会很快变得混乱。
export a=$(script.sh)
希望这会有所帮助。请注意,变量和 = 之间没有空格。回显输出
echo $a
【讨论】:
a?在echo 语句中,您应该在$a 周围使用双引号。
您需要以前面的点开始脚本,这会将导出的变量放在当前环境中。
#!/bin/bash
...
export output="SUCCESS"
然后就这样执行
chmod +x /tmp/test.sh
. /tmp/test.sh
当您需要整个输出而不仅仅是单个值时,只需将输出放入变量中,就像其他答案所示
【讨论】: