2012年12月6日星期四

终端神秘退出

这几天我的GNOME Terminal有时在敲命令时会退出。今天发现,在输入完命令和空格再按Tab后就会退出。这个问题必须要解决,否则根本无法正常工作。
  • 起初怀疑是GNOME Terminal更新中引入的bug,Google了一下没有相关的结果。
  • 我试验了Teminator和XTerm,也都有同样的问题。
  • 怀疑GNOME的快捷键设置出问题了,把Tab按键映射成了Ctrl-D。但是在Vim或者Gedit里面,Tab是可以正常输入的。
  • 重启了电脑,问题还是有。怀疑是不是本机Readline的设置有问题。登录到服务器上没有这个问题。证明了是本地的问题。
打开.bashrc看,最底下是最近加的一行:
set -e
为什么加这行呢?set -e是让Bash遇到错误(命令返回值非0)就退出,我一般在写Bash脚本的时候在最前面加上这一句。后来我想在.bashrc里面加上,以后的脚本不是都不用加了吗?没有多思考就加上了,结果导致了终端神秘退出的问题。

把这一行注释掉问题就解决了。那为什么按Tab会出错呢?在Bash里面输入:
set -x
输入命令和空格后再按Tab,就会输出Bash补全的很长的输出:
$ a + local compdir=./completions
+ [[ /usr/share/bash-completion/bash_completion == */* ]]
+ compdir=/usr/share/bash-completion/completions

.......
在Bash设置了set -e的情况下,应该是中间有一条命令的返回值非0,所以导致Bash退出了。

由此看来,set -e是根本不能放在.bashrc里面的,否则无法交互使用终端了。需要单独写在脚本里面。另外,set -ex是调试Bash脚本很方便的东西,可经常使用。

2012年12月2日星期日

Android下的自由软件

智能手机和传统的计算机一样,有着各种各样的病毒、流氓软件、窃取用户隐私的软件。也和计算机一样,使用自由/开源软件可以保证这些软件让用户绝对放心。

因为苹果的iOS AppStore的用户许可和GPL的许可不兼容,或者说苹果公司对自由软件很不友好,所以我只对Android下的自由软件感兴趣。

Google Play商店并不提供按照许可来搜索应用,所以我以前搜索的方法比较土,就是搜索github, open source, sourceforge等这样的关键词,来找找自由软件。比较经典的自由软件有ConnectBot,现在越来越多了,比如Firefox, FB Reader。维基百科上有一个页面,列出了Android下的自由软件,还有F-Droid网站AOpenSource网站,上面也都是Android下的自由软件。