Cygwin笔记

chere and tcsh

  • 使用Cygwin的人通常属于依赖Windows广泛的软件支持,又对Unix下各种小工具以及更加方便直接的全局路径无法释怀。而且我还怀着能用脚本做“几乎一切”事情的自动化美梦。但是,Windows下和Unix下的路径是不兼容的,我所说的不是正反斜杠,而是命名习惯。因为命令行空格支持的不好,所以Unix下常用“_”下划线代替Windows目录中常常出现的“ ”空格。但是要在命令行中cd到一个有多个空格的路径中去真是噩梦一桩。这个时候图形化的资源管理器就显示出它的威力,更不必说还有极其好用的Total Commander神器。
  • chere这个Cygwin的组件就能够用来缓解这一痛点。它的功能是在资源管理器(or TC)的右键菜单中加入一个“Bash Prompt Here”选项。它能够开启一个Cygwin shell并cd到当前目录,省去了各种痛苦。当然,除了Bash以外最新的版本也支持其他的shell,比如我最常用的tcsh。安装好以后,用administrator权限开启一个新的Cygwin,输入命令

chere -i -t mintty -s tcsh

  • 其中-t mintty用来指定mintty来代替windows command prompt做终端,是PuTTYcyg不再继续支持64-bit Cygwin之后的最好选择,并且是Cygwin自带的。但是这样并不能够使用tcsh,具体现象就是tcsh启动之后的目录并不是指定的目录而是用户目录/home/xxx。仔细看man chere之后发现了另一个参数”-2″,也就是直接用Windows先转换目录,再启动mintty & tcsh。这样解决了tcsh不能使用”$target_dir”作为参数的毛病。

chere -i -t mintty -s tcsh -2

  • 试过还是不行。再看网络上的讨论thread,毕竟使用tcsh的都是老古董,所以讨论的不多且没有解决方案。而bash之类就手到擒来第一步就能直接成功。经过研究发现,原来chere会给tcsh传一个”-l”的参数来模拟login,所以会source/etc/csh.login,这个文件中最后一行竟然是”cd”!好吧,将这个comment掉就好了。
  • 同时chere还能让你定制出现在右键菜单里item的文字,所以我最后使用的命令是:

chere -i -t mintty -s tcsh -2 -e “Open Cygwin at here”

file permission /et/fstab

    • 混合使用Cygwin和Windows native tools常常会带来file permission的混乱。比如某一个在windows中建立的文件夹经过Cygwin的拷贝以后就不能够访问了。这个时候就需要经常chmod来进行调整。即使通过脚本来做这件事情也费时良多。我们可以通过改变Cygwin处理文件系统file permission的方式来简化操作。当然这样也丢失了Cygwin原本的仿Unix file permission的管理方式。有得必有失。
    • 修改/etc/fstab,加上noacl参数

    # none /cygdrive cygdrive binary,posix=0,user 0 0

    none /cygdrive cygdrive binary,posix=0,user,noacl 0 0

    • 其中noacl的是如此定义的

    noacl – Cygwin ignores filesystem ACLs and only fakes a subset of permission bits based on the DOS readonly attribute. This behaviour is the default on FAT and FAT32. The flag is ignored on NFS filesystems.

    • 需要注意的是,原本一些不能够访问的文件夹现在要修改权限使其能够访问就更难了。所以最好的办法是先不修改/etc/fstab,而是先将这些权限混乱的文件和文件夹全部修复,再修改/etc/fstab.
    • 另外,修改了/etc/fstab需要关闭所有Cygwin窗口,再新开Cygwin才能生效。
    Advertisements

    Leave a Reply

    Fill in your details below or click an icon to log in:

    WordPress.com Logo

    You are commenting using your WordPress.com account. Log Out / Change )

    Twitter picture

    You are commenting using your Twitter account. Log Out / Change )

    Facebook photo

    You are commenting using your Facebook account. Log Out / Change )

    Google+ photo

    You are commenting using your Google+ account. Log Out / Change )

    Connecting to %s