Birçok program bu tekniği kullanarak davranışını değiştiren davranışını değiştiren tek bir çalıştırılabilir dosya bulunur.
Programın içinde genellikle çalıştırılabilir dosyanın çağrıldığı adı belirleyen ve daha sonra bu çalıştırılabilir ad için uygun işlevselliği arayacak olan case / switch ifadesi adı verilen bir yapı bulunur. Bu ad genellikle programın aldığı ilk argümandır. Örneğin, C
yazarken:
int main(int argc, char** argv)
argv[0]
yürütülebilir dosya adını içerir. En azından, bu tüm mermiler için standart davranıştır ve argümanlar kullanan tüm çalıştırılabilirler bunun farkında olmalıdır.
Perl'deki örnek
İşte Perl'de bir araya getirdiğim ve tekniği de gösteren örnek.
İşte gerçek script, onu çağır mycmd.pl
:
#!/usr/bin/perl
use feature ':5.10';
(my $arg = $0) =~ s#./##;
my $msg = "I was called as: ";
given ($arg) {
$msg .= $arg when 'ls';
$msg .= $arg when 'find';
$msg .= $arg when 'pwd';
default { $msg = "Error: I don't know who I am 8-)"; }
}
say $msg;
exit 0;
İşte dosya sistemi kurulumu:
$ ls -l
total 4
lrwxrwxrwx 1 saml saml 8 May 24 20:49 find -> mycmd.pl
lrwxrwxrwx 1 saml saml 8 May 24 20:34 ls -> mycmd.pl
-rwxrwxr-x 1 saml saml 275 May 24 20:49 mycmd.pl
lrwxrwxrwx 1 saml saml 8 May 24 20:49 pwd -> mycmd.pl
Şimdi komutlarımı çalıştırdığımda:
$ ./find
I was called as: find
$ ./ls
I was called as: ls
$ ./pwd
I was called as: pwd
$ ./mycmd.pl
Error: I don't know who I am 8-)