[unixtool今日作ったシェル関数

シンボリックリンクをつきあたりまでたどるもの。
realpath, readlink はないと困る。

tracelink() {
	target="$1"
	if [ -e "$target" ];then
		if [ -L "$target" ];then
			echo "$target ->"
			"$0" `ls -ld "$target" | sed -e 's@.* -> @@'`
		else
			ls -ld "$target"
		fi 
	else
		echo "$target: not exist"
	fi
}


zsh のこの機能はすばらしい。
http://chasen.org/~daiti-m/text/zsh-intro.html

% compare.pl =(sort +2 -n data1) =(sort +2 -n data2)

真似したかったのがかなり苦しい。

# anonymous buffer
anonbuf() {
	tmpfile="/tmp/anonbuf.$RANDOM"
	"$@" >| $tmpfile
	echo $tmpfile
}

[~:2]$ compare.pl `anonbuf sort +2 -n data1` `anonbuf sort +2 -n data2`


そういえば、

% gcc -o foo -O foo.c -lm -lnsl -lsocket -l

とまで打って, 「しまった, このディレクトリに必要なライブラリがあったかな」と思って ls したくなったりすることはよくあると思います。

私は bash でこんなとき、C-a # ENTER として、後で履歴を戻ります。
shopt -s interactive_comments でないとダメですが、デフォルトでそうなっています。


これは Emacszsh に同じような機能があったはず。
実用はしないと思う。

supercd() {
	x=`echo \`echo "$1" | sed -e 's@[^/]@&*/@g'\``
	for i in $x; do
		if [ -d "$i" ]; then
			builtin cd "$i" && return
		fi
	done
	echo "No such directory"
}

[~:2]$ supercd /ulb
[/usr/local/bin:2]$ supercd /u/p
[/usr/ports:2]$