我有一个shell脚本"script.sh",在Unix窗口中执行时会输出"success"或"Failed"。现在我想将script.sh的输出存储到Unix命令变量中。 say $a = {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 的输出存储在 $a 中吗? - loganecho 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
。当然,您也可以打印这些值并使用合理的返回值退出,以便包装脚本可以根据需要灵活处理脚本。
export a=$(script.sh)
echo $a
a
?在 echo
语句中应该使用双引号来包含 $a
。 - Sven Marnach#!/bin/bash
...
export output="SUCCESS"
然后像这样执行它
chmod +x /tmp/test.sh
. /tmp/test.sh
当您需要整个输出而不仅仅是单个值时,只需像其他答案所示将输出放入变量中即可。