Nhiều chương trình sử dụng kỹ thuật này trong đó có một thực thi duy nhất thay đổi hành vi của nó dựa trên cách nó được thực thi.
Thông thường có một cấu trúc bên trong chương trình được gọi là câu lệnh case / switch xác định tên mà tệp thực thi được gọi và sau đó sẽ gọi chức năng phù hợp cho tên thực thi đó. Tên đó thường là đối số đầu tiên mà chương trình nhận được. Ví dụ: C
khi bạn viết:
int main(int argc, char** argv)
argv[0]
chứa tên của thực thi được gọi. Ít nhất, đây là hành vi tiêu chuẩn cho tất cả các shell và tất cả các tệp thực thi sử dụng các đối số nên được biết về nó.
Ví dụ trong Perl
Đây là một ví dụ giả định tôi kết hợp với Perl, nó cũng cho thấy kỹ thuật này.
Đây là kịch bản thực tế, gọi nó 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;
Đây là thiết lập hệ thống tập tin:
$ 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
Bây giờ khi tôi chạy các lệnh của mình:
$ ./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-)