【问题标题】:Undo global STDERR -> STDOUT redirection撤消全局 STDERR -> STDOUT 重定向
【发布时间】:2017-03-05 21:36:02
【问题描述】:

我正在编写一个脚本,它将 ssh 连接到主机,然后 sudo 连接到特权用户。由于我们的主机不允许 sudo 使用非 tty 会话,因此启用了伪 tty。

pseudo-tty 自动将所有 STDERR 输出重定向到 STDOUT。这给项目带来了一系列问题,因为依赖库不能很好地处理 STDERR 输出。

是否可以撤消 STDERR -> STDOUT 输出重定向?换句话说,是否可以全局强制所有 STDERR 输出发送到 STDOUT?我知道可以在每个命令的基础上执行此操作,但我正在寻找一种只需执行一次的方法 - 理想情况下是通过 ssh 连接到主机。

【问题讨论】:

    标签: linux ssh sudo tty


    【解决方案1】:

    您无法“撤消”重定向,但您可以重定向到其他地方。

    shell 脚本中的“裸”重定向(例如,2>/dev/null)本身将重定向 shell 本身的 stdout 或 stderr 以及 shell 运行的所有未来命令。

    【讨论】:

    • 是的,你可以。您可以克隆文件描述符,然后关闭PDT中对应stdoutstderr的条目1和2,然后添加克隆的FD,它将占据PDT中未使用的第一个条目。 (新关闭的 1 和 2 个条目)。我认为...
    • @TonyTannous:进行新的重定向,但不会撤消先前的重定向。您无法撤消重定向,因为在 fd 关闭后会丢失以前去哪里的信息。您只能猜测它曾经去过的地方并尝试重新打开它。
    • 好的,知道了。谢谢 :) 我的意思是你可以为stdinstdout “恢复”它,例如我们知道他们的 FD 曾经在 PDT 中的位置。但我同意你的评论。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2015-09-02
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多