如何编写zsh脚本在新终端标签运行多条命令 支持跨操作系统
跨操作系统多命令执行解决方案
跨平台原生创建终端标签没有完全统一的通用实现,不同系统的默认终端程序差异较大,以下提供两种可行方案:
方案1:使用跨平台进程管理工具(更推荐)
该方案无需适配不同终端的接口,稳定性和兼容性更强,不需要单独开标签也可以统一管理所有进程:
- 首选
concurrently工具,属于Node生态的跨平台命令并发管理工具- 安装:执行
npm install -g concurrently全局安装 - 单条命令即可启动所有任务:
特性:不同进程的输出日志会用不同颜色区分,按下Ctrl+C会统一终止所有运行中的进程,完全兼容Windows、macOS、Linux三大系统。concurrently "node index.js" "./gradlew run" "其他命令1" "其他命令2" - 安装:执行
- 如果你不想依赖Node环境,Linux和macOS可以使用
tmux工具,支持拆分窗格或者开启标签管理不同进程,提前写好tmux会话配置即可一键启动所有任务,Windows可以通过WSL使用tmux。
方案2:分系统适配终端标签启动逻辑
如果你确实需要每个命令运行在独立的终端标签中,可以在脚本中判断当前操作系统,调用对应终端的开标签命令,示例bash脚本如下(Windows可以通过Git Bash、WSL运行,也可以对应改写成PowerShell脚本):
#!/bin/bash # 优先执行执行完成后自动结束的短命令 echo "开始执行一次性任务" # 替换为你自己的其他命令 your-command-1 your-command-2 echo "所有一次性任务执行完毕" # 根据操作系统启动长期运行的命令 if [[ "$OSTYPE" == "darwin"* ]]; then # macOS 原生Terminal适配 osascript -e 'tell application "Terminal" to do script "node index.js"' osascript -e 'tell application "Terminal" to do script "./gradlew run"' elif [[ "$OSTYPE" == "linux-gnu"* ]]; then # Linux Gnome Terminal适配,使用其他终端可替换为对应命令 gnome-terminal --tab -- bash -c "node index.js; exec bash" gnome-terminal --tab -- bash -c "./gradlew run; exec bash" elif [[ "$OSTYPE" == "cygwin" || "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then # Windows Terminal适配,没有安装Windows Terminal可替换为CMD/PowerShell对应命令 wt.exe new-tab powershell -NoExit node index.js wt.exe new-tab powershell -NoExit ./gradlew run fi
内容的提问来源于stack exchange,提问作者theLost Ip
相关产品推荐
相关产品推荐

