【问题标题】:How to store an output of shell script to a variable in Unix?如何将 shell 脚本的输出存储到 Unix 中的变量中?
【发布时间】:2012-06-08 11:51:03
【问题描述】:

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

【问题讨论】:

标签: shell unix


【解决方案1】:

两个简单的例子来捕获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

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

【讨论】:

  • 是的,它返回一个字符串。我只想将值存储到 $a
  • 可以用 script.sh 代替命令吗?比如:$a=script.sh 会存储 script.sh 的输出吗?
【解决方案2】:

假设你想存储一个 echo 命令的结果

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

输出:

hello  
hello,world!

【讨论】:

  • @NitsanBaleli 这是一个答案,而不是一个问题
【解决方案3】:

您可能应该重新编写脚本以返回一个值而不是输出它。而不是:

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 而不是打印successexit 1 而不是打印Failed。当然,您也可以打印这些值并以合理的返回值退出,这样包装脚本就可以灵活地处理脚本。

【讨论】:

  • 附带说明,您需要在任何实际代码中使用successfailed(注意大小写一致),否则事情会很快变得混乱。
【解决方案4】:
export a=$(script.sh)

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

echo $a

【讨论】:

  • 脚本什么时候执行?提交后 echo $a?还是导出后?
  • 为什么要导出a?在echo 语句中,您应该在$a 周围使用双引号。
  • @login 它将在子shell中运行脚本并等待它退出,该子shell的流将指向变量“a”,这意味着它们输出的所有内容都将写入变量而不是你的主shell的标准输出
  • @SvenMarnach 我不知道 OP 想如何使用该变量,导出使其可用于子进程
  • @logan $(command) 是一种运行命令和捕获输出的方法
【解决方案5】:

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

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

然后就这样执行

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

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

【讨论】:

  • 使用源时没有理由“导出”。此外,对于单个值,退出状态或标准输出似乎更有意义。
猜你喜欢
  • 2017-06-13
  • 1970-01-01
  • 2020-08-30
  • 1970-01-01
  • 2018-01-27
  • 2019-03-18
  • 2012-08-17
  • 1970-01-01
  • 2015-05-30
相关资源
最近更新 更多