如何基于数组和命令模板生成&&连接的Bash执行命令
实现方案
完全可以实现你描述的遍历模板生成命令、按顺序短路执行的效果,不需要依赖yarn workspaces foreach,以下是适配不同场景的正确语法:
终端直接执行的Bash写法
逻辑和你给出的伪代码完全对齐:遍历数组填充命令模板,用&&拼接后统一执行,和你原本手写的长串命令行为完全一致:
# 定义目标参数数组 targets=('b' 'w' 'g' 's') # 拼接命令串 full_cmd="" for t in "${targets[@]}"; do full_cmd+="yarn $t types && " done # 切除末尾多余的 && 后执行 eval "${full_cmd%&& }"
package.json 脚本适配写法
写在package.json的scripts字段中时,推荐用更简洁的短路循环写法,不需要拼接命令字符串,行为和&&拼接完全等价:任意一个命令执行失败就立刻终止,输出效果和原生手写命令完全一致,无额外封装输出:
{ "scripts": { "run-all-types": "for t in b w g s; do yarn $t types || exit 1; done" } }
配置完成后直接执行yarn run-all-types即可达到你原本输入长串命令的效果。
如果你更偏好和伪代码一致的拼接执行写法,package.json中也可以用单行版的eval实现:
{ "scripts": { "run-all-types": "arr='b w g s'; cmd=''; for t in $arr; do cmd=\"$cmd yarn $t types &&\"; done; eval \"${cmd%&&}\"" } }
内容的提问来源于stack exchange,提问作者iserdmi
相关产品推荐
相关产品推荐

