vimdiff: シンボリックリンクを使ってオプション付きのコマンドを渡す方法

$ file `which vimdiff
/usr/bin/vimdiff: symbolic link to `vim'

なのですが,もちろん

$ vim tmp0 tmp1
$ vimdiff tmp0 tmp1

の2つは動作が変わります.
これはどんな風に実装してるんでしょう...
lnコマンドのドキュメントにはそういったことは書いていませんし,
googleで検索かけてみても出てきませんでした.


ちなみに,
vimdiffはvim -dOと同じコマンド結果になります.
また,
vimdiff -dOはvimdiffそのものと同じコマンド結果になります.
さらに,
vimdiff -o はvim -do は同じコマンド結果になります.
つまり,
vimdiffにはvimに最初から-dOオプションが付いたのと変わらないようです.


とここまで書いて思い当たる方法があったので試してみました.

int 
main(int argc, char *argv[])
{
	printf("program name: %s\n", argv[0]);
	return 0;
}

というコードを書いてコンパイル後,

$ ln -s ./a.out foo
$ ./a.out
program name: ./a.out
$ ./foo
program name: ./foo

おおー!
なるほど.多分こうやって実装しているのかもしれませんね.