iTerm2 中使用 `rz` 命令無法彈出文件選擇窗口,以及正確配置
在 iTerm2 中使用 `rz` 命令無法彈出文件選擇窗口,通常不是因為 `rz` 本身沒安裝,而是因為 **iTerm2 沒有正確配置以支持 Zmodem 文件傳輸協(xié)議**。
請按照以下步驟逐一排查和解決:
### 第 1 步:確保系統(tǒng)已安裝 lrzsz
`rz` 和 `sz` 命令來自于 `lrzsz` 這個軟件包。首先確認它是否已安裝。
1. 在終端中執(zhí)行以下命令來安裝或檢查:
```bash
# 使用 Homebrew 安裝(如果沒有安裝)
brew install lrzsz
# 或者檢查是否已安裝以及安裝位置
which rz
which sz
```
正常情況下,會返回類似 `/usr/local/bin/rz` 的路徑。如果 `brew` 提示已安裝或安裝成功,說明命令行工具本身沒問題。
---
### 第 2 步:配置 iTerm2 的 Zmodem 觸發(fā)器(最關(guān)鍵的一步)
iTerm2 本身并不知道 `rz`/`sz` 命令何時被調(diào)用。你需要通過配置 **觸發(fā)器 (Triggers)**,讓它監(jiān)聽終端輸出的特定字符串(這些字符串是 `rz` 命令在等待接收時發(fā)出的),然后自動觸發(fā)對應的腳本來處理文件上傳/下載。
1. **下載 Zmodem 輔助腳本**
我們需要兩個腳本:`iterm2-send-zmodem.sh` (用于發(fā)送 `sz`) 和 `iterm2-recv-zmodem.sh` (用于接收 `rz`)。
將它們下載到本地一個合適的目錄,例如 `~/bin` 或 `/usr/local/bin`。
```bash
# 創(chuàng)建目錄(如果不存在)
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
# 給腳本添加執(zhí)行權(quán)限
chmod +x ~/bin/iterm2-*.sh
```
> **注意**:經(jīng)典的原作者倉庫(`mmastrac`)已經(jīng)歸檔,上述鏈接是一個活躍的復刻(fork),通常更有效。如果失效,可以搜索 “iTerm2 Zmodem” 尋找其他來源。
2. **在 iTerm2 中配置觸發(fā)器**
* 打開 **iTerm2 -> Settings (或 Preferences) -> Profiles**。
* 選擇你正在使用的 Profile(通常是 `Default`)。
* 進入 **Advanced -> Triggers** 標簽頁。
* 點擊右下角的 **Edit** 按鈕。
* 點擊 **+** 號添加兩條觸發(fā)器規(guī)則:
**第一條(用于 `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**: ? 勾選

* 配置完成后,點擊 **Save**。
---
### 第 3 步:使用正確的姿勢操作
1. **在遠程服務器上執(zhí)行 `rz` 命令**。
2. 此時,**iTerm2 的觸發(fā)器會檢測到 `rz` 命令發(fā)出的特定字符串**。
3. 緊接著,iTerm2 會自動運行你剛才配置的 `iterm2-recv-zmodem.sh` 腳本。
4. 這個腳本會**彈出一個本地的文件選擇窗口**,讓你選擇要上傳的文件。
5. 選擇文件后,上傳過程會自動開始。
---
### 常見問題排查
* **檢查腳本路徑**:確保你在 Triggers 里配置的腳本路徑(如 `~/bin/...`)與實際下載腳本的路徑完全一致。使用絕對路徑最保險(例如 `/Users/YourUsername/bin/iterm2-recv-zmodem.sh`)。
* **檢查腳本權(quán)限**:再次確認你已經(jīng)用 `chmod +x` 命令給腳本添加了執(zhí)行權(quán)限。
* **重啟 iTerm2**:配置完成后,完全關(guān)閉 iTerm2 再重新打開,讓配置生效。
* **檢查遠程服務器**:確保遠程服務器上也安裝了 `lrzsz`。
```bash
# 在遠程服務器上執(zhí)行(對于基于 Debian/Ubuntu 的系統(tǒng))
sudo apt-get install lrzsz
# 對于基于 CentOS/RHEL 的系統(tǒng)
sudo yum install lrzsz
```
* **使用 `-e` 參數(shù)**:有些版本的 `rz` 可能需要 `-e` 參數(shù)來避免轉(zhuǎn)義字符問題,可以試試 `rz -e`。
### 替代方案:使用 SSH 客戶端
如果以上配置對你來說過于繁瑣,可以考慮使用其他更方便的圖形化SSH客戶端,它們通常內(nèi)置了更簡單的文件傳輸功能:
* **Termius**: 自帶文件傳輸面板。
* **Tabby**: 開源免費,支持直接拖拽上傳下載。
* **Electerm**: 開源免費,支持拖拽和Zmodem。
* **FinalShell**: 國產(chǎn),功能強大,內(nèi)置文件管理窗口。
但對于很多深度終端用戶來說,在 iTerm2 中配置好 Zmodem 是一次配置、終身受益的便捷方式。希望以上步驟能幫你解決問題!

浙公網(wǎng)安備 33010602011771號