悲剧,当用cywin 写Linux脚本
时间:2011-03-23 来源:RocZhang
上一篇文章说到用cywin 在window上面调用linux 的命令(不是Linux命令本身,而是Linux命令对应的window 的模拟命令), 并且使得linux 命令与window 的Dos命令 结合起来,貌似功能强大。恰好有这么一个需求,需要自动化做一个批量转换,而转换器只有window版本的。 本来可以用batch 或者python,但是想试试cywin调用window 的命令的强大。结果悲剧产生了。
1. window上面的回车换行与Linux 不一样。 结果cywin里面的sh 解析不了window 文件中的回车换行。
--------->解决方法 dos2unix
2. Window 上面的命令与cywin 命令重名,比如find 命令。
---------->在系统的环境变量里面把cywin的路径放到window系统路径之前。
3. window的有些命令只认识“\" 作为路径的分隔符,而cywin 缺省是“/”,也认识“\”. 但是当用cywin 的命令生成路径时,其用的是“/”作为路径的分隔符。
悲剧的是,"\" 个符号在Cywin里面用作是转义符, 当以“\"的路径读进来的时候,所有的路径都直接连起来。 比如 C:\A\B\C.txt 变为 C:ABC.txt.
一个临时办法: 将find 生成的路径,比如C:/A/B/C.txt ,用tr先替换为C:\A\B\C.txt,再将其变为 “C:\\A\\B\\C.txt”. 最后被cywin的shell 读进去。
4. 中文支持问题。 在linux 上面terminal 可以直接支持中文,而在win7的命令行上不支持中文,又悲剧了。
安装window7的时候,是英文版。 没有缺省安装中文字体,找下载网址,没有提供,悲剧了。
希望下载后,切换到 win7 powershell上面,就可以。
5. 还有一个不得不提的就是终端terminal, window上面用cmd或者powershell 和linux上面的模拟终端相比,就是人间炼狱。
或许cywin自带有好的终端,但是也没有激情去试一试。
如果是原本就用python,或者是用batch 这些估计都不是问题。悲剧的是用cywin下的模拟Linux命令,彻底悲剧。 本来1个小时的东西,确花一个下午。 cywin 下的linux shell 带来的问题,比解决的问题还要多。
不是原生态的东西,不是主流的东西,如果没有使用经验,使用之前,一定要考虑风险,否则得不偿失!
想想,还是python吧,跨平台,本来就支持window 的命令,又支持linux 下的shell 命令。 还有一个终端交互命令ipython。 以后就用它了。 希望悲剧就此打住!