From d6b04da7574d66c489b1d112aae4fe190a4000b8 Mon Sep 17 00:00:00 2001 From: Awin Huang Date: Thu, 20 Aug 2026 20:21:27 +0800 Subject: [PATCH] =?UTF-8?q?Add=202026-08-20=5FWindows=20Git=20Bash=20?= =?UTF-8?q?=E4=B8=8A=E4=BD=BF=E7=94=A8=20ADB=20=E7=9A=84=E5=95=8F=E9=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../featured.jpg | Bin 0 -> 23616 bytes .../index.md | 248 ++++++++++++++++++ 2 files changed, 248 insertions(+) create mode 100644 content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/featured.jpg create mode 100644 content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/index.md diff --git a/content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/featured.jpg b/content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/featured.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6fd1fc575c0cc702d8432133bfc5853d3847633f GIT binary patch literal 23616 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 literal 0 HcmV?d00001 diff --git a/content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/index.md b/content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/index.md new file mode 100644 index 0000000..3868bb0 --- /dev/null +++ b/content/posts/2026/2026-08-20_Windows Git Bash 上使用 ADB 的問題/index.md @@ -0,0 +1,248 @@ +--- +slug: Windows Git Bash 上使用 ADB 的問題 +title: Windows Git Bash 上使用 ADB 的問題 +description: +toc: true +authors: + - awin +tags: + - windows + - terminal +categories: + - System +series: + - Windows +date: 2026-08-20T00:00:00 +lastmod: 2026-08-20T00:00:00 +featuredVideo: +featuredImage: +draft: false +enableComment: true +--- + +# Windows Git Bash 上使用 ADB 的路徑轉換問題 + +在 Windows 的 Git Bash 裡使用 ADB 時,可能會遇到一個讓人摸不著頭緒的問題:明明輸入的是正確 Android path,ADB 收到的卻像是 Windows path。 + + + +例如,要把目前目錄的 `1.txt` 傳到 Android 裝置: + +```zsh +adb push 1.txt /data/local/tmp/ +``` + +這條命令裡其實同時存在兩個檔案系統: + +```text +1.txt Windows 本機檔案 +/data/local/tmp/ Android 裝置內的目的地 +``` + +對 ADB 來說,兩者的意義很清楚;但 Git Bash 背後的 MSYS2 runtime 只看得到命令列字串。它看到 `/data/local/tmp/` 這種以 `/` 開頭的參數時,可能會以為這是本機 POSIX path,於是在啟動 Windows 原生的 `adb.exe` 前,先把它轉成 Windows path。 + +結果,一個原本屬於 Android 的 path,就這樣被「好心辦壞事」地改寫了。 + +## Git Bash 為什麼要自動轉換 path? + +Git Bash 提供類 Unix 的操作環境,使用的 path 長得像這樣: + +```text +/c/Users//Downloads/1.txt +``` + +Windows 原生程式通常期待的是: + +```text +C:\Users\\Downloads\1.txt +``` + +為了讓 Git Bash 可以順利呼叫 Windows 程式,Git for Windows 所附的 MSYS2 runtime 會檢查傳給原生 `.exe` 的參數,並嘗試將 POSIX path 自動轉成 Windows path。 + +```text +Git Bash Windows 原生程式 + +/c/Users/me/file.txt + | + | MSYS2 path conversion + v +C:\Users\me\file.txt -------> adb.exe、subl.exe、其他 CLI +``` + +對大部分 Windows CLI 而言,這項功能非常實用。問題是,MSYS2 無法知道某個 `/` 開頭的參數究竟代表: + +- Windows 本機檔案的 POSIX 表示法;或 +- Android、Docker、遠端主機等另一個系統內的 path。 + +當兩者長得一樣,自動判斷就可能出錯。 + +## `MSYS_NO_PATHCONV` 是什麼? + +Git for Windows 提供 `MSYS_NO_PATHCONV`,用來停用傳給 Windows 原生程式的 POSIX-to-Windows path conversion。 + +```zsh +MSYS_NO_PATHCONV=1 adb push 1.txt /data/local/tmp/ +``` + +設定後,`/data/local/tmp/` 會原樣傳給 `adb.exe`,不再被改寫成本機 Windows path。 + +它的行為可以整理成: + +```text +沒有設定 MSYS_NO_PATHCONV + -> 使用預設的自動 path conversion + +設定 MSYS_NO_PATHCONV=1 + -> 停用自動 path conversion +``` + +需要特別注意:`MSYS_NO_PATHCONV=1` 不是開啟轉換,而是關閉轉換。若要恢復預設行為,應該移除這個環境變數: + +```zsh +unset MSYS_NO_PATHCONV +``` + +不要把 `MSYS_NO_PATHCONV=0` 當成「重新開啟轉換」;這是一個是否存在的停用開關,不是一般的 `0`/`1` Boolean 設定。 + +## 不要全域停用 path conversion + +最直接的做法看起來是把下面這行寫進 shell 設定檔: + +```zsh +export MSYS_NO_PATHCONV=1 +``` + +但這會影響之後啟動的所有 Windows 原生程式。 + +例如,原本可以在 Git Bash 使用 POSIX path 呼叫 Sublime Text: + +```zsh +subl.exe /c/Users//notes.txt +``` + +預設情況下,MSYS2 會將參數轉成正確的 Windows path。若全域停用轉換,`subl.exe` 會直接收到 `/c/Users/...`;Windows 原生程式可能將它視為目前磁碟機根目錄下的 `c\Users\...`,最後開啟錯誤的位置。 + +因此,真正需要的不是「整個 Git Bash 都不要轉換」,而是「只有呼叫 ADB 時不要轉換」。 + +## 正確做法:只替 ADB 停用轉換 + +可以為 ADB 建立一個 shell wrapper: + +```zsh +adb() { + MSYS_NO_PATHCONV=1 command adb.exe "$@" +} +``` + +如果使用 Zsh,將它加入 `~/.zshrc`,再重新載入: + +```zsh +source ~/.zshrc +``` + +如果使用 Bash,則加入 `~/.bashrc`: + +```bash +source ~/.bashrc +``` + +這個 wrapper 做了三件事: + +1. 讓輸入的 `adb ...` 先進入 shell function。 +2. 只替這次執行設定 `MSYS_NO_PATHCONV=1`。 +3. 用 `command adb.exe "$@"` 呼叫真正的 ADB,並完整保留所有參數。 + +如此一來,影響範圍只限於 ADB: + +```text +一般 Windows CLI + -> 維持預設 path conversion + +adb.exe + -> 只在這次呼叫停用 conversion + -> Android path 保持原樣 +``` + +## 停用轉換後,本機絕對路徑怎麼辦? + +停用 path conversion 也會帶來另一個問題。以下命令的第一個 path 是 Windows 本機檔案: + +```zsh +adb push /c/Users//Downloads/1.txt /data/local/tmp/ +``` + +wrapper 會讓所有參數都保持原樣,因此 `adb.exe` 收到的本機來源仍是: + +```text +/c/Users//Downloads/1.txt +``` + +這不是 Windows 原生 path。此時應使用 `cygpath`,主動將本機來源轉換成 Windows 格式: + +```zsh +adb push "$(cygpath -w /c/Users//Downloads/1.txt)" /data/local/tmp/ +``` + +其中: + +```text +cygpath 在 POSIX 與 Windows path 格式之間轉換 +-w 輸出 Windows 格式 +$(...) 執行括號內的命令,並用輸出取代這一段 +"..." 確保含有空白的 path 仍被視為單一參數 +``` + +shell 展開後,實際傳給 ADB 的命令概念上會變成: + +```zsh +adb.exe push "C:\Users\\Downloads\1.txt" /data/local/tmp/ +``` + +如果來源是目前目錄下的相對路徑,就不需要額外處理: + +```zsh +adb push 1.txt /data/local/tmp/ +``` + +相對路徑 `1.txt` 對 Git Bash 與 Windows 原生程式而言,都會以目前工作目錄為基準,因此通常可以直接使用。 + +## 判斷原則 + +遇到 path conversion 問題時,可以先問兩個問題: + +```text +這個 path 屬於哪一個檔案系統? + | + +-- Windows 本機 + | | + | +-- POSIX 絕對路徑:用 cygpath -w 主動轉換 + | +-- 相對路徑:通常可直接使用 + | + +-- Android/遠端系統 + | + +-- 必須保持原樣,不可被 MSYS2 當成本機 path 轉換 +``` + +`MSYS_NO_PATHCONV` 並不是越常設定越好。它適合用在「目標程式有自己的 slash path 語意」的單次命令,例如 ADB;不適合成為整個 shell 的全域預設。 + +## 結論 + +這個問題的根源不在 ADB,也不在 Android,而是同一條命令同時跨越了三個世界: + +```text +Git Bash 的 POSIX path + | + v +Windows 原生 adb.exe + | + v +Android 裝置內的 path +``` + +MSYS2 的自動轉換原本是為了打通 Git Bash 與 Windows,卻無法辨認 Android path。正確解法是縮小例外範圍:保留全域預設轉換,只在呼叫 ADB 時設定 `MSYS_NO_PATHCONV=1`;若本機來源使用 POSIX 絕對路徑,再以 `cygpath -w` 明確轉成 Windows path。 + +簡單來說:**本機 path 主動轉換,Android path 保持原樣,而且例外只套用在真正需要的命令上。** + +## 參考資料 +- [MSYS2 Filesystem Paths](https://www.msys2.org/docs/filesystem-paths/) +- [Git for Windows release notes:`MSYS_NO_PATHCONV`](https://github.com/git-for-windows/build-extra/blob/master/ReleaseNotes.md)