2014-05-18 51 views
1

在我的bash脚本我有一个函数:控制台输出被抑制。为什么?

  • 包含expect脚本产卵的SSH连接到远程设备
  • 并根据是否连接超时或不echo的背上一个字符串该效果(作为返回值)

当我运行从终端和bash脚本的脚本达到声明:

myExpectFunc 
[further code...] 

那为什么我可以看到expect脚本的控制台输出,但如果我做到以下几点:

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

不会有控制台输出?这就像它被压制,直到retVal被分配一个值。

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

回答

1

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

是的。使用tee

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

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