【问题标题】:Return results for Ubuntu Updates in a Variable在变量中返回 Ubuntu 更新的结果
【发布时间】:2017-12-07 14:18:46
【问题描述】:

我正在尝试将来自 Ubuntu 16 服务器上的 /usr/lib/update-notifier/apt-check 的结果放入一个数组中,以便为监控工具做出 XML 响应,但不知何故,这个 apt-check 的值只是拒绝进入我的变量。为了简单,我省略了 XML 创建部分。

#!/bin/bash
APTCHECK="/usr/lib/update-notifier/apt-check"
APTResult="$(${APTCHECK})"
echo "Result is $APTResult"
exit 0

如果您现在使用 bash -x 运行此代码,您将看到结果返回到终端,但未分配给变量。如果我将“命令”替换为“ls -lah”之类的简单内容,一切正常。

我只是不知道为什么这不起作用?有人吗?

【问题讨论】:

  • 重定向标准错误:2>&1
  • 不过,您的脚本绝对没有任何用处。它基本上是无害的,但会丢失退出代码。一个绝对的改进是删除useless use of echo,但丢失真正的退出代码将是only效果。
  • 分配给一个数组看起来像array=(command >&2),但是数组的顺序不会特别可预测或有用,然后检索数组的语法将是一个新的复杂性。
  • bash -x ./APTCCHECK.sh 2>&1 没有帮助:(由于某种原因,对 apt-check 的调用将其结果返回到屏幕而不是 APTResult。?!?

标签: bash ubuntu-16.04 apt


【解决方案1】:

apt-check 打印到标准错误,因此您需要使用aptresult=$(/usr/lib/update-notifier/apt-check 2>&1) 来捕获它。

另一个选项是--human-readable 开关,它将打印到标准输出。那么唯一的问题是你必须解析文本输出(除非文本输出是你真正想要的)。

【讨论】:

  • 有没有一种简单的方法可以找出脚本何时将其输出发送到 stderr?
猜你喜欢
  • 1970-01-01
  • 2014-09-23
  • 2023-03-10
  • 2018-03-17
  • 2015-06-11
  • 2013-04-23
  • 2020-11-09
  • 2019-01-25
  • 1970-01-01
相关资源
最近更新 更多