Banyak program memanfaatkan teknik ini di mana ada satu executable yang mengubah perilakunya berdasarkan bagaimana itu dieksekusi.
Biasanya ada struktur di dalam program yang disebut pernyataan case / switch yang menentukan nama yang dapat dieksekusi dipanggil dan kemudian akan memanggil fungsionalitas yang sesuai untuk nama yang dapat dieksekusi itu. Nama itu biasanya argumen pertama yang diterima program. Misalnya, C
ketika Anda menulis:
int main(int argc, char** argv)
argv[0]
berisi nama yang dapat dieksekusi disebut. Setidaknya, ini adalah perilaku standar untuk semua shell, dan semua executable yang menggunakan argumen harus menyadarinya.
Contoh dalam Perl
Berikut ini adalah contoh yang saya buat di Perl yang menunjukkan tekniknya juga.
Ini skrip yang sebenarnya, sebut saja 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;
Inilah pengaturan sistem file:
$ 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
Sekarang ketika saya menjalankan perintah saya:
$ ./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-)