如何在Bash脚本中模拟回车键完成Expo构建流程?
Expo iOS构建脚本自动选择设备的问题
我的脚本与操作流程
当前使用的脚本:
#!/bin/sh cd Desktop/work-directory/project-directory/ code . npx expo run:ios -d sleep 10 xdotool key Return
日常操作流程:
- 导航到指定工作目录
- 打开文本编辑器
- 执行
npx expo run:ios -d命令在本地设备构建应用 - 命令执行后会弹出「Select a simulator」的选择提示,我始终选择第一个本地设备选项,希望脚本自动完成回车操作,无需手动干预
遇到的问题
尝试过用yes命令自动输入无效,调整sleep时长到30秒以上也没解决,了解过Expect工具但不确定是否有必要使用。想确认:
- 当前脚本写法是否存在错误?
- 是否需要替换
xdotool工具来和Expo CLI进行交互?
解决方案
1. 当前脚本的核心问题
你的脚本逻辑有问题:npx expo run:ios -d是阻塞式命令,它会一直停在选择提示那里等待用户输入,后面的sleep和xdotool命令要等这条命令执行完成后才会运行——这时候早就过了需要输入的时机,所以不管睡多久都没用。
2. 最可靠的方案:直接指定设备,跳过交互提示
Expo CLI支持直接指定目标设备,完全跳过选择步骤。
先执行以下命令列出所有可用的模拟器/设备:
xcrun simctl list devices
找到你常用设备的名称或者UUID,然后修改脚本里的命令:
# 使用设备名称 npx expo run:ios -d --device "你的设备名称" # 或者使用UUID npx expo run:ios -d --device 设备UUID字符串
这样命令会直接指定设备构建,不需要任何交互操作,这是最稳定的解决方式。
3. 若需自动处理交互:用Expect工具
如果不想每次手动指定设备,非要自动选择第一个选项,那必须用Expect——xdotool这类全局模拟键盘的工具,无法精准把输入发送到正在前台运行的Expo CLI交互进程里,所以没用。
写一个Expect脚本(保存为auto-build-ios.exp):
#!/usr/bin/expect -f # 切换到工作目录 cd Desktop/work-directory/project-directory/ # 打开编辑器 spawn code . # 启动Expo构建命令 spawn npx expo run:ios -d # 等待选择提示出现 expect "Select a simulator" # 发送回车选择第一个选项 send "\r" # 保持交互,让命令继续执行 interact
给脚本添加执行权限:
chmod +x auto-build-ios.exp
运行这个脚本就能自动完成选择操作。
为什么yes命令无效?
yes命令默认持续输出y字符,但Expo的选择提示需要的是回车(\r),而且Expo的交互提示是直接和终端会话交互,不是从标准输入读取内容,所以用yes | npx expo run:ios -d这种管道方式根本无法传递输入,自然无效。
内容的提问来源于stack exchange,提问作者user13054042
相关产品推荐
相关产品推荐

