bash 无法正确读取从 SSH 连接到 Mikrotik 设备的文本输出?

Text output from a SSH connection to a Mikrotik appliance cannot be properly read by bash?

我正在编写一个简单的脚本,以便在我的 Mikrotik 路由器中有可用的新固件更新时通知我。用于此目的的 RouterOS 命令是:

ssh myrouter system package update print

当它 运行 正常时它工作正常,显示如下:

            channel: stable
  installed-version: 6.48
     latest-version: 6.48.1
             status: New version is available

我用来仅检索相关信息以便触发通知的完整命令是:

ssh -q myrouter system package update print |tail -2 |head -1 |sed "s/: /\n/" |tail -1

当运行“按原样”(不在脚本或其他任何内容中)时会导致此结果:

New version is available

但是,我似乎无法在简单的 if 语句中解析此文本,无论我是直接操作它还是先将其重定向到本地文件:

UPDATES_AVAILABLE=$(ssh myrouter system package update print |tail -2 |head -1 |cut -d: -f2)

if [[ "$(echo ${UPDATES_AVAILABLE})" == "New version is available" ]]; then
  echo "INFO: New firmware version is available"
fi

最后一个总是 returns 没有内容,无论是 运行 在脚本中还是直接在 shell.

我错过了什么?

哦,没关系,我刚修好了。

将输出重定向到 /tmp/mikrotik.tmp 文件后,我想到了 运行:

file /tmp/mikrotik.tmp

然后我看到它返回了这个:

mikrotik: ASCII text, with CRLF line terminators

因此,只要我在字符串过滤器命令中添加 | dos2unix,它就会按预期开始工作,现在是:

UPDATES_AVAILABLE=$(ssh myrouter system package update print |dos2unix |tail -2 |head -1 |cut -d: -f2)

if [[ "$(echo ${UPDATES_AVAILABLE})" == "New version is available" ]]; then
  echo "INFO: New firmware version is available"
fi

正在正确返回:

INFO: New firmware version is available