为什么stderr函数无法比较错误字符串

时间:2015-02-20 13:27:30

标签: bash

在询问我的问题之前,我已经彻底搜索了一个答案。 我搜索谷歌和stackoverflow“stderr功能失败比较文件” 我发现谷歌这些:   http://mywiki.wooledge.org/BashPitfalls

Redirect stdout and stderr to Function

echo that outputs to stderr

但他们都没有回答我的问题。 他们专注于如何正确传输stderr,而不是如何比较错误字符串。

我无法理解为什么比较不起作用以及如何解决它。

如果函数的输入不是来自stderr,它也会成功比较。      如果函数的输入确实来自其他命令的stderr则成功比较

我很抱歉,但我的问题是非常具体的这些条件,所以我不知道有多少人会从答案中受益(可能为什么我自己没有找到答案)

现在问题本身:

这是我的功能:

helpPrintError(){
  read line
  error='Pseudo-terminal will not be allocated because stdin is not a terminal.'
  if [[ "$line" == "$error" ]]; then
    :
  else
    echo -e "\e[31m\e[1m$line\e[0m"
  fi
}

这就是我试图让这项工作的方式:

( cat $commandsFile | sshpass -p "$userPswrd" ssh -o StrictHostKeyChecking=no admin@${mainIP} > $resultsFile ) 2>&1 | helpPrintError
好吧,这只是我试图解决这个问题的一种方式。我试过很多其他方式。

结果:

Pseudo-terminal will not be allocated because stdin is not a terminal.

问题和意图: 我想看到(以粗体显示红色)任何不是的错误消息: “由于stdin不是终端,因此不会分配伪终端。”

问题是我无法一次又一次地过滤错误消息。 我尝试了很多变化来解决它但没有成功。

额外的背景资料:

    在$ commandsFile中的
  • 我有ssh服务器执行的命令。

  • 我无法控制ssh服务器密钥所以我使用sshpass并连接$ userPswd和$ mainIP

  • 在服务器上执行的命令的结果(将被写入)$ resultsFile

  • 来自ssh尝试的任何错误消息都将在函数中进行过滤(不会看到一个错误消息类型。其他颜色将以粗体显示)

  • 我在ssh上尝试了-t -t选项,但这只是弄乱我的命令结果

任何建议和解决方案都将受到欢迎和赞赏!

0 个答案:

没有答案