2009年11月24日 星期二

在windows下使用Linux的應用程式的方案

之前在Linux環境下,使用到一堆非常好用的小工具,像是vim(在Windows下可以使用GVim的替代方案), sed, find, awk, diff, grep, xargs都是在寫程式時,非常好用的小工具,而目前改到Windows下寫程式,沒有了這一些小工具真的非常的不方便!

當然啦,在windows下有許多方式可以使用到linux下的指令
1. 利用虛擬機器(vmware, virtualbox),就直接在windows上面灌linux系統,當然就可以使用linux指令啦
2. 使用偽虛擬機器(Cygwin),因為它並沒有完整的模擬Linux系統,不過,相對於第一個方法,它倒是簡單許多
3. native porting,不必像Cygwin那樣拖著一個大大的 unix emulation layer,像是GNUWin32UnxUtils都是非常完整的把Linux下的小工具porting到windows下的project,而且其中的每一個小程式都可以單獨使用,像是如果你只想要使用sed,那你就把sed.exe放的資料夾的路徑加入系統的Path中,這樣每一次就可以使用了。

而我目前用的最順的是使用GNUWin32,真的是超好用的啦!

目前有遇到一個問題就是,windows系統也有內建find.exe這一個執行檔,當然要使得我每一次把find.exe會找到GNU的find.exe只要把我的路徑放在系統Path的最前面就好,但是呢,我怕這樣會讓系統某一些程式使用到find.exe會出現錯誤。目前我有一個想法,就是做一個bat檔,當我要執行Linux環境時,就執行這一個bat檔,它會「暫時」的把Path只設定成我目前的路徑,如此一來,當我打find.exe時,就會真的執行到由Linux下的find而porting到windows下的find.exe啦,另一個方法可能就是改名字吧,把linux下的find.exe改名為其它名字

另外要注意的一點是,在放置執行的路徑中,最好不好有空白存在,不然會出現問題!

[2009.12.08 補充]
上面提到,因為GNUWin32的find.exe與windows下的find.exe會有衝突,所以,我們要自己建立一個.bat可以暫時的修改PATH,讓它只有指到GNUWin32\bin。
gnuwin32.bat
@echo off
cd d:\
SET PortableRootDir=D:
PATH=%PortableRootDir%\Portable\PortableApps\gnuwin32\bin;%PortableRootDir%\Portable\PortableApps\gVimPortable
%SystemRoot%\system32\cmd.exe /k

其中PATH就是放gnuwin32\bin的位置,如此一來,就可以使用GNUWin32的find.exe而不會與windows下的find.exe有所衝突了

參考資料:
GNUWin32
vmware
virtualbox
Cygwin
UnxUtils
GNU utilities for Win32 (Unxutils)
輕鬆學會 MSYS + MinGW ---- 在 Windows 底下重新編譯 GNU 程式
[筆記] Linux.find+grep.screen.vimdiff + vi 設定檔+Visual block

2 則留言:

Chihao 提到...

非常非常的好,我現在也是在linux跟win下寫程式的啦。有空介紹一下vim, sed, find, awk, diff入門。是入門歐。 謝謝大大!從sed開始教吧。

冰燕 提到...

有啊!不過,wim, sed, find, awk我都有簡單介紹過了,請爬文!謝謝!!