Dalo se to napsat trochu lip, nicmene dekuji za informaci, myslel jsem, ze [ je v bashi taky builtin.
Ovsem nemate uplnou pravdu – prinejmensim v Debianu Lenny jsou „[“ a „test“ dve nezavisle binarky, ktere se navzajem nijak nevolaji ;-).
$ ls -l /usr/bin/[ /usr/bin/test
-rwxr-xr-x 1 root root 34504 2008–04–04 16:22 /usr/bin/[
-rwxr-xr-x 1 root root 22852 2008–04–04 16:22 /usr/bin/test
$ strace -e file,process [ -d /bin/bash ]
execve(„/usr/bin/[“, [„[“, „-d“, „/bin/bash“, „]“], [/* 20 vars */]) = 0
access(„/etc/ld.so.nohwcap“, F_OK) = –1 ENOENT (No such file or directory)
access(„/etc/ld.so.preload“, R_OK) = –1 ENOENT (No such file or directory)
open(„/etc/ld.so.cache“, O_RDONLY) = 3
access(„/etc/ld.so.nohwcap“, F_OK) = –1 ENOENT (No such file or directory)
open(„/lib/i686/cmov/libc.so.6“, O_RDONLY) = 3
open(„/usr/lib/locale/locale-archive“, O_RDONLY|O_LARGEFILE) = 3
stat64(„/bin/bash“, {st_mode=S_IFREG|0755, st_size=700492, …}) = 0
exit_group(1) = ?
$ strace -e file,process test -d /bin/bash
execve(„/usr/bin/test“, [„test“, „-d“, „/bin/bash“], [/* 20 vars */]) = 0
access(„/etc/ld.so.nohwcap“, F_OK) = –1 ENOENT (No such file or directory)
access(„/etc/ld.so.preload“, R_OK) = –1 ENOENT (No such file or directory)
open(„/etc/ld.so.cache“, O_RDONLY) = 3
access(„/etc/ld.so.nohwcap“, F_OK) = –1 ENOENT (No such file or directory)
open(„/lib/i686/cmov/libc.so.6“, O_RDONLY) = 3
open(„/usr/lib/locale/locale-archive“, O_RDONLY|O_LARGEFILE) = 3
stat64(„/bin/bash“, {st_mode=S_IFREG|0755, st_size=700492, …}) = 0
exit_group(1) = ?