iTerm2 中使用 `rz` 命令无法弹出文件选择窗口,以及正确配置

在 iTerm2 中使用 `rz` 命令无法弹出文件选择窗口,通常不是因为 `rz` 本身没安装,而是因为 **iTerm2 没有正确配置以支持 Zmodem 文件传输协议**。

请按照以下步骤逐一排查和解决:

### 第 1 步:确保系统已安装 lrzsz

`rz` 和 `sz` 命令来自于 `lrzsz` 这个软件包。首先确认它是否已安装。

1. 在终端中执行以下命令来安装或检查:
```bash
# 使用 Homebrew 安装(如果没有安装)
brew install lrzsz

# 或者检查是否已安装以及安装位置
which rz
which sz
```
正常情况下,会返回类似 `/usr/local/bin/rz` 的路径。如果 `brew` 提示已安装或安装成功,说明命令行工具本身没问题。

---

### 第 2 步:配置 iTerm2 的 Zmodem 触发器(最关键的一步)

iTerm2 本身并不知道 `rz`/`sz` 命令何时被调用。你需要通过配置 **触发器 (Triggers)**,让它监听终端输出的特定字符串(这些字符串是 `rz` 命令在等待接收时发出的),然后自动触发对应的脚本来处理文件上传/下载。

1. **下载 Zmodem 辅助脚本**
我们需要两个脚本:`iterm2-send-zmodem.sh` (用于发送 `sz`) 和 `iterm2-recv-zmodem.sh` (用于接收 `rz`)。
将它们下载到本地一个合适的目录,例如 `~/bin` 或 `/usr/local/bin`。

```bash
# 创建目录(如果不存在)
mkdir -p ~/bin

# 下载 recv-zmodem.sh (用于 rz 上传)
curl -Lo ~/bin/iterm2-recv-zmodem.sh https://github.com/robberphex/iTerm2-zmodem/raw/master/iterm2-recv-zmodem.sh

# 下载 send-zmodem.sh (用于 sz 下载)
curl -Lo ~/bin/iterm2-send-zmodem.sh https://github.com/robberphex/iTerm2-zmodem/raw/master/iterm2-send-zmodem.sh

# 给脚本添加执行权限
chmod +x ~/bin/iterm2-*.sh
```

> **注意**:经典的原作者仓库(`mmastrac`)已经归档,上述链接是一个活跃的复刻(fork),通常更有效。如果失效,可以搜索 “iTerm2 Zmodem” 寻找其他来源。

2. **在 iTerm2 中配置触发器**
* 打开 **iTerm2 -> Settings (或 Preferences) -> Profiles**。
* 选择你正在使用的 Profile(通常是 `Default`)。
* 进入 **Advanced -> Triggers** 标签页。
* 点击右下角的 **Edit** 按钮。
* 点击 **+** 号添加两条触发器规则:

**第一条(用于 `rz` 上传):**
* **Regular Expression**: `rz waiting to receive.\*\*B0100`
* **Action**: `Run Silent Coprocess`
* **Parameters**: `~/bin/iterm2-recv-zmodem.sh`
* **Instant**: ✅ 勾选

**第二条(用于 `sz` 下载):**
* **Regular Expression**: `\*\*B00000000000000`
* **Action**: `Run Silent Coprocess`
* **Parameters**: `~/bin/iterm2-send-zmodem.sh`
* **Instant**: ✅ 勾选

![iTerm2 Trigger Configuration](https://img-blog.csdnimg.cn/direct/b16cbbfd9c044f8d841b65c3e200c7b5.png)

* 配置完成后,点击 **Save**。

---

### 第 3 步:使用正确的姿势操作

1. **在远程服务器上执行 `rz` 命令**。
2. 此时,**iTerm2 的触发器会检测到 `rz` 命令发出的特定字符串**。
3. 紧接着,iTerm2 会自动运行你刚才配置的 `iterm2-recv-zmodem.sh` 脚本。
4. 这个脚本会**弹出一个本地的文件选择窗口**,让你选择要上传的文件。
5. 选择文件后,上传过程会自动开始。

---

### 常见问题排查

* **检查脚本路径**:确保你在 Triggers 里配置的脚本路径(如 `~/bin/...`)与实际下载脚本的路径完全一致。使用绝对路径最保险(例如 `/Users/YourUsername/bin/iterm2-recv-zmodem.sh`)。
* **检查脚本权限**:再次确认你已经用 `chmod +x` 命令给脚本添加了执行权限。
* **重启 iTerm2**:配置完成后,完全关闭 iTerm2 再重新打开,让配置生效。
* **检查远程服务器**:确保远程服务器上也安装了 `lrzsz`。
```bash
# 在远程服务器上执行(对于基于 Debian/Ubuntu 的系统)
sudo apt-get install lrzsz

# 对于基于 CentOS/RHEL 的系统
sudo yum install lrzsz
```
* **使用 `-e` 参数**:有些版本的 `rz` 可能需要 `-e` 参数来避免转义字符问题,可以试试 `rz -e`。

### 替代方案:使用 SSH 客户端

如果以上配置对你来说过于繁琐,可以考虑使用其他更方便的图形化SSH客户端,它们通常内置了更简单的文件传输功能:

* **Termius**: 自带文件传输面板。
* **Tabby**: 开源免费,支持直接拖拽上传下载。
* **Electerm**: 开源免费,支持拖拽和Zmodem。
* **FinalShell**: 国产,功能强大,内置文件管理窗口。

但对于很多深度终端用户来说,在 iTerm2 中配置好 Zmodem 是一次配置、终身受益的便捷方式。希望以上步骤能帮你解决问题!

posted @ 2025-09-06 14:06  Questions张  阅读(135)  评论(0)    收藏  举报