折腾msys命令行的输出编码

在msys中,ls之类的命令输出都是gbk的。
感觉略不舒服(主要是因为个人习惯)就决定把它折腾到utf-8去。

注意:首先你需要有一个支持utf-8的终端模拟器比如mintty

首先用mingw-get安装编码转换工具iconv

$ mingw-get install msys-iconv

最初准备用alias处理,
但是发现没法处理管道(ls | iconv)就放弃alias了,
转而考虑function

代码雏形就是这样了:

function ls(){
  /bin/ls "$@" | iconv -f gbk -t utf-8
}

然后经过完善+封装……代码成品:

# convert command output from gbk to utf-8
# usage: convert "command" "base-args" "base-args(for tty only)" "other-args"
function convert(){
  local cmd="$1 $2"
  if [ -t 1 ]; then
    # tty
    cmd="$cmd $3"
  fi
  $cmd "${@:4}" | iconv -f gbk -t utf-8
}

function ls(){
  convert "/bin/ls" "--show-control-chars" "--color -C" "$@"
}

你可能感兴趣的:(msys,shell)