Redirect stdout and stderr to Function,
但他们都没有回答我的问题。 他们专注于如何正确传输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不是终端,因此不会分配伪终端。”
问题是我无法一次又一次地过滤错误消息。 我尝试了很多变化来解决它但没有成功。
额外的背景资料:
我有ssh服务器执行的命令。
我无法控制ssh服务器密钥所以我使用sshpass并连接$ userPswd和$ mainIP
在服务器上执行的命令的结果(将被写入)$ resultsFile
来自ssh尝试的任何错误消息都将在函数中进行过滤(不会看到一个错误消息类型。其他颜色将以粗体显示)
我在ssh上尝试了-t -t选项,但这只是弄乱我的命令结果
任何建议和解决方案都将受到欢迎和赞赏!