控制台输出被抑制为什么?

时间:2014-05-18 21:57:21

标签: bash

在我的bash脚本中,我有一个函数:

  • 包含产生与远程设备的SSH连接的expect脚本
  • 并且取决于连接是否超时echo返回一个字符串(作为返回值)

当我从终端运行脚本并且bash脚本到达以下语句时:

myExpectFunc
[further code...]

为什么我可以看到expect脚本的控制台输出,但如果我执行以下操作:

retVal=$(myExpectFunc)
[further code...]

没有控制台输出?就像在retVal被赋值之前一样被抑制。

我希望将local变量保留给函数,并将这些变量的值作为我的返回值返回,以便能够case开启。当然,如果我没有向函数声明local个变量,那么变量将是全局的,我可以简单地case对全局变量进行调用。但我宁愿不这样做。那么有没有办法能够维护控制台输出并将返回值分配给retval

1 个答案:

答案 0 :(得分:1)

  

那么有没有办法能够维护控制台输出并将返回值分配给retval?

是。使用tee

retVal=$(myExpectFunc | tee /dev/tty)

myExpectFunc的所有标准输出都会发送到tee的标准输入。 tee将两者复制到文件/dev/tty(这是您的终端)和自己的标准输出(然后由retVal捕获)。