rozwiązanie arctgx jest chyba ładniejsze
Ładne czy nie, ale wydaje mi się, że propozycja Minia była raczej nie na temat. Efekt może i jednakowy, ale w zadaniu chodziło o sam sposób (tak przynajmniej odczytuję pytanie autorki).
Oliff, przyjrzyj się temu:
cat <|plik.sh
#!/bin/bash
echo odpalasz skrypt jako \\$0
koniec
cat plik.sh
ln -s plik.sh link.sh
ls -l plik.sh link.sh
cat link.sh # zauważ, że link.sh wskazuje na tę samą zawartość, co plik.sh. Jeśli w plik.sh coś zmienisz, zobaczysz to samo w link.sh.
chmod +x plik.sh
./plik.sh
./link.sh
arctgx: jest na temat. Załóżmy że mamy prosty skrypt (skrypt.sh), w którym są dwie procedury -- A i B. Skrypt domyślnie wykonuje procedurę A, zaś po podaniu jakiegokolwiek przełącznika -- procedurę B. Jeżeli teraz zrobimy alias o nazwie proceduraB do wywołania skrypt.sh --parametr*, to będziemy mieli dokładnie to, czego oczekuje OP -- jeden skrypt dostępny pod dwoma nazwami (skrypt.sh oraz proceduraB), którego działanie zależy od wywołania. OP nie ma (a przynajmniej nie podała) określonych wymagań odnośnie tego, w jaki sposób ma to być zrealizowane.
Nawiasem mówiąc pragnę zauważyć, że właśnie w ten sposób w większości dystrybucji ustawiane są domyślne flagi dla niektórych standardowych narzędzi (np. alias grep='grep --colour=auto'). Nikt się nie bawi w dowiązania symboliczne i modyfikowanie kodu programu w taki sposób, aby sprawdzał, pod jaką nazwą został wywołany.
Oczywiście Twoja propozycja będzie działać niezależnie od używanej powłoki (o ile w skrypcie nie będzie żadnych *shyzmów), natomiast rozwiązanie z aliasami wymaga odpowiedniej konfiguracji powłoki i przestanie działać przy jej (powłoki) zmianie. Takich drobnych różnic można by wskazać więcej, ale ostatecznie wszystko sprowadza się do motta perla: TIMTOWTDI.
* chodzi o coś takiego:
alias proceduraB="skrypt.sh --parametr"
Rzuć oczętami na poniższe, jeżeli dobrze rozumiem chodzi Ci o coś podobnego. Rozwiązanie oparte na ln oraz aliasie + wywołania pokazujące różnicę. Jak widać w przypadku aliasów w skrypcie jest nie nazwa aliasu a skrypt, na który wskazuje. (od $ zaczynają się polecenie w konsoli, tak dla przejrzystości):
$ cat tak.sh
#!/bin/bash
echo $0;
if [[ $0 =~ "tak.sh" ]]; then
echo "3 x tak";
fi;
if [[ $0 =~ "nie.sh" ]]; then
echo "3 x nie";
fi;
exit;
$ ls -al| grep nie.sh
lrwxrwxrwx 1 pear pear 6 01-16 14:15 nie.sh -> tak.sh
$ sh tak.sh
tak.sh
3 x tak
$ ./tak.sh
./tak.sh
3 x tak
$ sh nie.sh
nie.sh
3 x nie
$ ./nie.sh
./nie.sh
3 x nie
$ alias nein='/home/pear/nie.sh'
$ nein
/home/pear/nie.sh
3 x nie
O dwóch nazwach plików mowy nie było, więc racja: przy dosłownej interpretacji pytania aliasy też wejdą w temat.
Nikt się nie bawi w dowiązania symboliczne i modyfikowanie kodu programu w taki sposób, aby sprawdzał, pod jaką nazwą został wywołany.
Bawią się ludzie, nie tylko w bashu:
$ ls -la /sbin/halt /sbin/shutdown /sbin/reboot
lrwxrwxrwx 1 root root 14 paź 12 10:10 /sbin/halt -> /bin/systemctl
lrwxrwxrwx 1 root root 14 paź 12 10:10 /sbin/reboot -> /bin/systemctl
lrwxrwxrwx 1 root root 14 paź 12 10:10 /sbin/shutdown -> /bin/systemctl
$ readlink -f /usr/bin/gvim
/usr/bin/vim.gtk
$ readlink -f /usr/bin/vim
/usr/bin/vim.gtk
Inny przykład to gmplayer jako link do mplayera.