2017-03-05 143 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中的位置。但我同意你的评论。 –

相关问题