Nowe posty

xx System pakietów jest uszkodzony (Linux Ubuntu 20.04 LTS) (3)
2022-10-01, 15:44:17
xx Otoczenie najkrótszej frazy (2)
2022-09-25, 12:18:46
xx Skrypt do otwarcia i zamknięcia plików (2)
2022-09-19, 21:18:41
xx potrzebuje by ktoś mi wytłumaczył jedną żecz (4)
2022-09-16, 23:14:22
clip Zmiana ustawień punktu montowania (2)
2022-09-07, 23:20:08
xx Czarny ekran na start - linux mint (2)
2022-09-07, 14:46:31
xx Przydatne Linki (12)
2022-09-07, 14:33:34
xx Czy jest to potrzebne w domu ? (1)
2022-09-07, 08:26:40
xx Lupa. (5)
2022-09-04, 00:47:38
xx problem z wyburzaniem dell inspirion 15 3552 (1)
2022-09-03, 19:47:29

Autor Wątek: Czy jeden skrypt może być dostępny pod dwiema nazwami ?  (Przeczytany 5459 razy)

oliff

  • Gość
Jak w temacie. Pomoże mi ktoś to ugryźć ?
To znaczy, może jaśniej, jeden skrypt, ale żeby można go wywoływać pod dwiema nazwami, nie wiem jak zaimplementować ?

chmooreck

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #1 dnia: 2012-01-14, 13:48:27 »
implementujesz normalny skrypt, a potem tworzysz do niego dowiązanie (man ln)

oliff

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #2 dnia: 2012-01-14, 14:02:10 »
OK. Dzięki !

Ksanderon

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #3 dnia: 2012-01-14, 19:31:33 »
można też użyć aliasów

oliff

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #4 dnia: 2012-01-14, 22:38:37 »
Jednak założenie jest trochę inne, bo jeżeli chcę skrypt występujący pod dwiema nazwami i jego działanie zależy od nazwy użytej do jego wywołania, to czy nadal potrzebne jest dowiązanie ? ( jak narazie nie mam jeszcze żadnych spektakularnych efektów jeżeli chodzi o wywołanie tego skryptu pod dwiema nazwami )

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #5 dnia: 2012-01-14, 23:43:15 »
Jeżeli działanie ma być zmienne, to musisz w skrypcie zaimplementować przełącznik zmieniający zachowanie skryptu i utworzyć alias do skryptu uruchomionego z tym przełącznikiem.

Albo napisać dwa różne skrypty.

arctgx

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #6 dnia: 2012-01-15, 01:42:22 »
Jest jeden parametr powłoki mówiący, pod którą nazwą pliku ten sam skrypt został uruchomiony. Testując go, można obyć się bez aliasów i przełączników.

Manual basha mówi o nim w rozdziale Special Parameters.

Ksanderon

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #7 dnia: 2012-01-15, 14:47:33 »
konkretnie np. $0 sprawdzenie wartości tego argumentu skryptu pozwoli ci na poradzenie sobie bez aliasów ale za to przy pomocy dowiązań(rozw. arctgx). Minio proponuje to zrobić inaczej, dodać do programu sprawdzenie argumentu i w zależności od jego wartości wykonywać określone zadanie, a następnie dodać aliasy do tego polecenia z przedefiniowanymi argumentami. Efekt identyczny ale rozwiązanie arctgx jest chyba ładniejsze

oliff

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #8 dnia: 2012-01-15, 20:21:51 »
Nie idzie mi to. Zrobiłam tak : stworzyłam skrypt o jednej z nazw, która ma być podawana, zrobiłam go tak, że ma w sobie 2 funkcje, jedna do wykonania przy wywołaniu (załóżmy) nazwa1 a druga funkcja do nazwa2. Uznałam, że zrobię prosty warunek do tego dowiązania, co by łatwo wybierał sobie funkcje do tych nazw, ale nie działa... działa mi tylko przy wywołaniu dla pierwszej nazwy... sądzę, że może nie do końca rozumiem działanie tego ln... męczę ten problem już pare godzin i może jeszcze mi coś podpowiecie ?
najłatwiej by było zrobić jakieś dowiązanie do tych funkcji, ale to chyba niemożliwe...
jak robię to na dwóch plikach z dowiązaniem to działa... ale koniecznie ma być jeden i jakieś czary mary, które mi nie idą...

arctgx

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #9 dnia: 2012-01-15, 23:56:07 »
Cytat: Ksanderon
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

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #10 dnia: 2012-01-16, 02:15:49 »
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"

Xax79

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #11 dnia: 2012-01-16, 14:34:30 »
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

arctgx

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #12 dnia: 2012-01-16, 19:05:22 »
O dwóch nazwach plików mowy nie było, więc racja: przy dosłownej interpretacji pytania aliasy też wejdą w temat.

Cytat: Minio
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.

oliff

  • Gość
Czy jeden skrypt może być dostępny pod dwiema nazwami ?
« Odpowiedź #13 dnia: 2012-01-16, 21:42:55 »
Chodziło mi tylko i wyłącznie o dowiązania symboliczne, aliasy nie sprawdzą się tutaj (przekonałam się o tym już).
Cel tego był taki (wydaje mi się, że ja zbyt jasno tego nie ujęłam, więc ponawiam temat):
1. Jeden skrypt.
2. Dwie nazwy tego skryptu nazwa1.sh i nazwa2.sh
3. Przy nazwa1.sh wykonywany jest cały skrypt z funkcją: funkcja jeden ().
4. Przy nazwa2.sh wykonywany jest cały skrypt z funkcją: funkcja dwa ().
5. Koniec.
Udało się wszystko z dowiązaniem symbolicznym, które skrypt z opcją -d sam na początku sobie tworzy. A potem bawić się można w wywoływanie go pod różnymi nazwami z różnym skutkiem.


BARDZO DZIĘKUJĘ ZA WSZYSTKIE SUGESTIE ! BARDZO DUŻO DZIĘKI NIM WYNIOSŁAM. WŁAŚCIWA POMOC NA WŁAŚCIWYM MIEJSCU. DZIĘKI !