2014-05-18 103 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捕獲)。