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

GitHub Actions中Bash脚本无法读取CLI输入的问题

GitHub Actions中CLI工具无法读取输入的问题排查与解决

核心问题分析

你遇到的问题主要来自三个方面:

  1. 环境变量大小写不匹配
    你在workflow.yml的Setup步骤里定义的环境变量是name: ${{ vars.USERNAME }},但setup.sh中使用的是全小写的$username。Bash环境变量严格区分大小写,这直接导致$username取不到任何值,后续输入自然为空。

  2. 未定义的creds变量
    setup.sh里用了$creds变量,但你没在workflow的env块中定义它。这会导致echo -e "$creds" >> auth.txt写入空内容到auth.txt,my-cli读不到有效输入。

  3. CLI工具的输入读取逻辑可能特殊
    部分CLI工具会直接读取终端(/dev/tty)而非标准输入(stdin),这种情况下管道、重定向等方式都会失效。


修正方案

1. 修复环境变量问题

先调整workflow.yml和setup.sh的变量名,保持大小写一致:

修正后的workflow.yml片段

- name: Setup
  env: 
      NAME: ${{ vars.USERNAME }}
      CREDS: ${{ vars.CREDS }}  # 先在GitHub仓库变量中定义好CREDS的值
  run: scripts/setup.sh
  shell: bash

修正后的setup.sh

#!/bin/bash
echo $NAME
echo -e "$CREDS" >> auth.txt
my-cli < auth.txt
# 也可以用here-string方式:my-cli <<< "$CREDS"
rm auth.txt

2. 针对读取终端的CLI工具

如果你的my-cli确实是读取终端而非stdin,就用expect工具模拟交互:

  1. 在workflow中添加安装expect的步骤:
- name: Install expect
  run: sudo apt-get install -y expect
  1. 创建expect脚本(比如run_my_cli.exp):
#!/usr/bin/expect
set input_content [lindex $argv 0]
spawn my-cli
expect "name:"  # 匹配CLI的输入提示
send "$input_content\r"
expect eof
  1. 在setup.sh中调用这个脚本:
chmod +x run_my_cli.exp
./run_my_cli.exp "$CREDS"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:45:06