Viele Programme verwenden diese Technik, wenn es eine einzelne ausführbare Datei gibt, deren Verhalten sich nach der Ausführung richtet.
Das Programm enthält normalerweise eine Struktur mit der Bezeichnung case / switch, die den Namen der ausführbaren Datei bestimmt und dann die entsprechende Funktionalität für diesen ausführbaren Namen aufruft. Dieser Name ist normalerweise das erste Argument, das das Programm erhält. Zum Beispiel, C
wenn Sie schreiben:
int main(int argc, char** argv)
argv[0]
Enthält den Namen der aufgerufenen ausführbaren Datei. Zumindest ist dies das Standardverhalten für alle Shells, und alle ausführbaren Dateien, die Argumente verwenden, sollten sich dessen bewusst sein.
Beispiel in Perl
Hier ist ein ausgedachtes Beispiel, das ich in Perl zusammengestellt habe und das auch die Technik zeigt.
Hier ist das eigentliche Skript, nennen Sie es 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;
Hier ist das Dateisystem-Setup:
$ 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
Wenn ich jetzt meine Befehle ausführe:
$ ./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-)