You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure DevOps Bash步骤重定向到/dev/stdout时报'No such device or address'错误

问题分析与解决思路

核心原因

从你提供的/proc/self/fd输出能看到,Bash进程的stdout(文件描述符1)指向的是socket:[27965],而非传统终端设备。Azure DevOps流水线的Bash步骤并非运行在交互式终端环境中,stdout/stderr实际上是连接到流水线日志收集服务的socket。

/dev/stdout是指向当前终端的符号链接,但当前环境没有可用终端设备,直接写入这个链接会触发No such device or address错误。同理,/dev/tty、/dev/pts/0这类终端设备文件,由于流水线未分配交互式终端,也无法正常写入。

解决办法

  1. 无需显式重定向到stdout
    echo等命令默认就会输出到stdout,Azure DevOps会自动收集这部分输出到流水线日志中。直接简化代码即可:

    - bash: |
        echo "Hello World to stdout"
    
  2. 必须重定向时使用文件描述符
    如果需要将其他输出流(比如某个命令的stderr)重定向到stdout,直接使用文件描述符&1(对应stdout)或&2(对应stderr),而非设备文件:

    # 将stderr合并到stdout输出
    some_command >&1
    # 单独重定向stdout
    some_command >&1
    

这种方式直接操作当前进程的文件描述符,不管它是socket还是终端,都能正常工作。

内容的提问来源于stack exchange,提问作者wesaw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 12:52:40