2017-03-05 59 views
1

我正在處理ssh進入主機,然後sudo到特權用戶的腳本。由於我們的主機不允許使用非tty會話進行sudo,所以啓用了僞tty。撤消全局STDERR - > STDOUT重定向

pseudo-tty自動將所有STDERR輸出重定向到STDOUT。這導致項目的一系列問題,因爲從屬庫不能很好地處理STDERR輸出。

是否可以撤消STDERR - > STDOUT輸出重定向?換句話說,是否有可能在全球範圍內將所有STDERR輸出而不是發送到STDOUT?我知道可以在每個命令的基礎上進行,但我正在尋找一種方法來做到這一點,只需要做一次 - 理想情況下,當向主持人開放時。

回答

0

您不能「撤銷」重定向,但可以在其他地方重定向。

一行中的shell腳本(例如,2>/dev/null)中的「裸」重定向會自行重定向stdout或stderr,因此將運行該shell的所有將來命令。

+0

是的,你可以。您可以克隆文件描述符,然後關閉PDT中對應於「stdout」和「stderr」的條目1和2,然後添加克隆的FD,它將佔用PDT中未使用的第一個條目。 (新近關閉1和2個條目)。我認爲... –

+0

@TonyTannous:這是一個新的重定向,它不會撤消以前的重定向。您無法撤消重定向,因爲關閉後fd過去的位置丟失的知識。你只能猜測它曾經去過的地方,並嘗試重新打開它。 –

+0

好吧。謝謝:)我的意思是你可以「恢復」它的stdin和stdout,例如我們知道他們的FD曾經在PDT中的位置。但我同意你的評論。 –

相關問題