変態言語


ふとシェルで

echo $PATH

ってやってみたら

/home/tyru/local/bin:/home/tyru/bin:/home/tyru/local/bin:/home/tyru/bin:/home/tyru/local/bin:/home/tyru/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin

あれ?随分と同じのがいくつもあるなー?と思ったので
これをどうにか重複してるものは一つにしたいと思った。

ORIG_IFS=$IFS
for i in $PATH; do echo "$i"; done | sort | uniq

で、書いてみるんだけどこの次が分からない。
行を連結させるコマンドなんてあったっけ。
いやていうかそもそもこれじゃ順序が違ってるじゃん。
PATHの順序変えるのはマズいだろ・・・


とかしばらく悩んだ後、全部perlでやっちゃえばいいことに気がついた。

# duplicated path was deleted but order doesn't change
if [ -x "$(which perl)" ]; then
    export PATH="$(perl -e 'for(split /:/, $ENV{PATH}){$h{$_} or $h{$_}=++$i} $,=q(:); %h=reverse %h; print map { $h{$_} } sort { $a <=> $b } keys %h')"
fi

なにこの変態言語。