如何通过一条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 }
怎么用?
- 保存配置文件后,在终端执行
source ~/.bash_profile(或对应的Zsh配置文件)让函数生效 - 直接输入
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
相关产品推荐
相关产品推荐

