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

如何通过一条Bash命令在独立标签页启动多个Rails服务器

在OS X终端一键启动多服务器并打开新标签页的方案

针对你在OS X下想要一键启动www、admin、api三个服务器,每个在新终端标签页运行的需求,我们可以通过Bash函数结合AppleScript来实现——毕竟非守护进程的服务需要前台运行,必须单独占用一个终端标签。

核心实现(适配默认Terminal.app)

把下面这段函数添加到你的~/.bash_profile(如果用Bash)或者~/.zshrc(如果用Zsh)里:

start_all_servers() {
    # 把你要启动的服务器命令放到这个数组里
    local servers=("www" "admin" "api")
    
    for server_cmd in "${servers[@]}"; do
        # 调用AppleScript让Terminal打开新标签并执行命令
        osascript <<EOF
tell application "Terminal"
    activate
    do script "$server_cmd"
end tell
EOF
    done
}

怎么用?

  1. 保存配置文件后,在终端执行source ~/.bash_profile(或对应的Zsh配置文件)让函数生效
  2. 直接输入start_all_servers回车,就能自动打开三个新标签,分别运行你的三个服务器命令

适配iTerm2的版本

如果你用的是iTerm2终端,把上面的函数替换成下面的版本:

start_all_servers() {
    local servers=("www" "admin" "api")
    
    for server_cmd in "${servers[@]}"; do
        osascript <<EOF
tell application "iTerm2"
    create window with default profile
    tell current session of current window
        write text "$server_cmd"
    end tell
end tell
EOF
    done
}

一些注意事项

  • 确保你的www、admin、api别名已经正确定义在你的shell配置文件里,新标签页的shell会继承这些别名,所以能直接识别命令
  • 如果你的服务器命令需要特定的工作目录,而别名里已经包含了cd逻辑(比如你写的www别名里有cd $HOME/code/www && rails s...),那完全没问题;如果别名没处理,记得把完整命令写到数组里,比如"cd $HOME/code/admin && rails s..."
  • 要是你想让第一个服务器在当前标签运行,剩下的在新标签,可以调整函数逻辑:
start_all_servers() {
    local servers=("www" "admin" "api")
    # 第一个命令在当前标签执行
    "${servers[0]}"
    # 剩下的命令打开新标签运行
    for ((i=1; i<${#servers[@]}; i++)); do
        osascript <<EOF
tell application "Terminal"
    activate
    do script "${servers[$i]}"
end tell
EOF
    done
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:23:37