米雪兒 [Windows] 程式設計教學:Bash on Windows

Facebook Twitter LinkedIn LINE Skype EverNote GMail Yahoo Email

前言

Bash on Windows,或稱為 Windows Subsystem for Linux (WSL),是 Windows 10 的新功能,在 Windows 10 環境中提供 Ubuntu 子系統。

雖然沒辦法替代原生的 GNU/Linux,Bash on Windows 提供許多 Linux 系統常見的命令列工具,對於類 Unix 系統使用者來說,可以減少學習 Windows-only 方案的負擔。這個子系統目前還是 beta 狀態,希望 Microsoft 日後能持續維護這個專案,讓 Windows 的終端機環境更好用。

Disclaimer:筆者尚入深入了解這個子系統,日後會再逐一更新相關內容。

安裝 Bash on Windows

現在直接在 Microsoft Store 即可選擇自己喜歡的 GNU/Linux 發行版,不用開 developer mode。

Bash on Windows 預設不會直接打開,要使用的話,有以下步驟:

  1. 開啟 developer mode
  2. 下載相關的 Windows 更新
  3. 開啟相關的 optional feature

之後,開啟一個 DOS 環境,輸入 bash 指令,第一次開啟時,會詢問使用者是否要下載 Ubuntu 子系統,依照系統指示安裝即可。首次使用時,系統會提示使用者建立一個帳號及設立密碼,由於這只是用於 Ubuntu 子系統的使用者名稱,不需要設立太複雜的名稱。日後要使用 WSL 時,也是開啟終端機後輸入 bash 即可進入這個子系統。

套件管理程式

如同 Ubuntu,WSL 也是使用 APT 來管理套件,使用者可依喜好自行選用 apt-get 或是 aptitude 來管理套件。由於 Ubuntu 預設沒有 root 帳號,需要更新軟體時,使用 sudo 即可切換至 root 權限。使用的方式就和原本的 Ubuntu 的 APT 相似。

檔案架構

這個子系統可以和原來的 Windows 系統上的檔案互動,例如,C: 磁碟位於 /mnt/c,另外會有獨立的家目錄,如 /home/user 等。如果要和 Windows 原生程式互動的檔案,建議放在 /mnt 之中。家目錄內的設定檔,最好不要用 Windows 原生軟體開啟,以免造成檔案損壞。

殼程式

WSL 預設提供 Bash,使用起來也和 Linux 或 Mac 上的 Bash 大抵上雷同,設定環境的方式也相同。

如果讀者想要用其他的 shell 環境,也可以自行更換,像筆者較偏好 Zsh + Oh My Zsh 的組合,就可以自行更換。但是要進入 WSL 時,仍然要先輸入 bash,進入 WSL 後才手動切換到 Zsh。由於 WSL 移植自 Ubuntu,命令列工具的參數也符合 Linux 的習慣,不太需要重新學習另一套操作方式。

文字檔案

由於可以和 Windows 系統上的文字檔案直接互動,Unix-like 系統上常見的文字處理工具也可以用在這些文字檔案上,相當地方便。

然而,這些文字檔案也會受到不同系統間的差異所影響,主要在兩方面:(1) 編碼 (encoding),(2) 行尾 (end of line)。

在 Linux 或是 Mac 等類 Unix 系統上,系統的編碼主要是用 UTF8,在 Windows 原生環境下則是依照語系而有所不同。在 WSL 中,可以用 iconv 來轉換文字編碼。

另外一個問題是行尾,不同系統使用的行尾不同。可用 dos2unix 這個小工具去轉換檔案行尾。

以下指令將檔案結尾轉為 UNIX 格式:

$ dos2unix path/to/file.txt

以下指令將檔案結尾轉為 DOS 格式:

$ unix2dos path/to/file.txt

由於系統的差異性,筆者傾向在 Windows 原生環境中處理文字檔案,而程式碼多以英文字元撰寫,較少受到編碼的影響,則可以在 WSL 下處理。

腳本語言

筆者目前尚未深入實測各個腳本語言的使用情形,理論上,沒有用到 C/C++,只以腳本語言實作的程式,應該不會有什麼大問題才是。

編譯軟體

經筆者實測,WSL 系統所編譯的執行檔僅能在該子系統內使用,而非原生的機械碼。對於內部使用的程式來說,是不是原生機械碼其實不是那麼重要,只要程式能順利執行即可。但若是要對外發佈的程式,就不適合在這個子系統內編譯,仍然要回歸原生的 Windows 環境。

對於使用到 C/C++ 的高階語言的延伸模組,也是可以在這個子系統中編譯和安裝,像是 某些 Perl、Ruby、Node.js 等語言的延伸模組,在 Windows 下時常水土不服,也可以在這個子系統試試。

不過,即使能夠安裝,也不代表就完全沒問題,筆者拿 Rails 5 在 WSL 中測試,光是 Hello World 等級的 app 就有一些小問題了。由於模組眾多,筆者也無法一一實測,要請各位讀者多加嘗試。

小結

Bash on Windows 算是 Microsoft 對開發者釋放的一項利多。然而,這項計畫還在早期階段,功能並不完善。

由於 Microsoft 將 Bash on Windows 視為開發工具,使用者不應預期可以完美地移植 Linux 環境到 Windows 上,而比較像是 Cygwin 般,視為在 Windows 內的一個次系統。以筆者的觀點來看,應該將這個子系統視為開發時的輔助工具,不宜直接用來取代 Linux 環境。