如何用Shell脚本在macOS的iTerm中打开3个终端并执行指定命令?
在macOS的iTerm中用Shell脚本打开多窗口并执行指定命令的可行方案
我之前也踩过open -a iTerm --args这个坑——iTerm对open命令的参数支持确实不太友好,因为它有自己的脚本接口体系。下面给你两个经过验证的可行方案,都能实现打开3个新窗口并各自执行特定命令的需求:
方案1:用AppleScript(系统自带,无需额外安装)
macOS自带的AppleScript可以直接调用iTerm的内部接口,灵活性很高。你可以把下面的代码保存成.sh脚本,修改命令数组里的内容即可:
#!/bin/bash # 替换成你需要执行的3个命令 TARGET_COMMANDS=( "cd /path/foo && npm run dev" "cd /path/bar && python3 main.py" "tail -f /var/log/nginx/access.log" ) for cmd in "${TARGET_COMMANDS[@]}"; do osascript <<EOF tell application "iTerm" # 创建新窗口(使用默认配置文件) create window with default profile # 在新窗口的当前会话中执行命令 tell current session of current window write text "$cmd" end tell end tell EOF done
关键细节说明:
create window with default profile:如果想指定特定的iTerm配置文件(比如你自定义的带颜色的profile),可以把default profile改成你的profile名称,比如"My Dev Profile"write text "$cmd":这个操作会模拟用户输入命令并回车,所以命令会直接执行- 如果命令里包含双引号,记得把数组里的命令用单引号包裹,避免解析错误,比如
'echo "Hello from iTerm"'
方案2:用iTerm官方命令行工具iterm2
iTerm提供了官方的命令行工具,语法更简洁,适合不想写AppleScript的场景。不过需要先通过Homebrew安装:
brew install iterm2
安装完成后,脚本可以写成这样:
#!/bin/bash TARGET_COMMANDS=( "cd /path/foo && npm run dev" "cd /path/bar && python3 main.py" "tail -f /var/log/nginx/access.log" ) for cmd in "${TARGET_COMMANDS[@]}"; do # 新建窗口并执行命令 iterm2 new-window --command "$cmd" done
额外功能:
如果需要指定窗口使用的配置文件,或者调整窗口位置,可以加参数:
# 使用指定配置文件新建窗口 iterm2 new-window --profile "My Dev Profile" --command "$cmd"
执行iterm2 new-window --help可以查看所有支持的参数,比如设置窗口大小、是否全屏等。
内容的提问来源于stack exchange,提问作者Fabio
相关产品推荐
相关产品推荐

