GitHub Actions中Bash脚本无法读取CLI输入的问题
GitHub Actions中CLI工具无法读取输入的问题排查与解决
核心问题分析
你遇到的问题主要来自三个方面:
环境变量大小写不匹配
你在workflow.yml的Setup步骤里定义的环境变量是name: ${{ vars.USERNAME }},但setup.sh中使用的是全小写的$username。Bash环境变量严格区分大小写,这直接导致$username取不到任何值,后续输入自然为空。未定义的
creds变量
setup.sh里用了$creds变量,但你没在workflow的env块中定义它。这会导致echo -e "$creds" >> auth.txt写入空内容到auth.txt,my-cli读不到有效输入。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工具模拟交互:
- 在workflow中添加安装expect的步骤:
- name: Install expect run: sudo apt-get install -y expect
- 创建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
- 在setup.sh中调用这个脚本:
chmod +x run_my_cli.exp ./run_my_cli.exp "$CREDS"
内容的提问来源于stack exchange,提问作者Shivang Mangal
相关产品推荐
相关产品推荐

