Czy ktoś może mi wyjaśnić, co robi skorupa w dwóch przykładach A) i B) poniżej? Oczywiście zachowuje się inaczej, ale nie mogę się dowiedzieć, dlaczego wynik jest inny.
Przykład:
niech skrypt w naszym bieżącym katalogu ma nazwę bla.sh
tylko jednej komendy:
echo ${0##/*} hello
A)
Rozpoczęty jako: ./bla.sh
daje:./bla.sh hello
B)
Rozpoczęty jako: . bla.sh
daje:-bash hello
Ponieważ używam tego w skrypcie, drugie wyjście (z powodu „-” przed -bash) zabija polecenie. Oczywiście prosty --
przed ${...}
pomógł, ale chciałbym zrozumieć, co powoduje wynik w pierwszej kolejności.
Uwielbiam bash. I vi [m]. Ale dygresję…
source
jest to alias bash.
, a nie odwrotnie isource
nie będzie działał w innych powłokach../<cmd>
uruchomi<cmd>
program znajdujący się w bieżącym katalogu w nowym (rozwidlonym) procesie. Musi być wykonywalny. A także czytelne, zaczyna się od#!
.. <cmd>
spowoduje, że twoja bieżąca powłoka wykona skrypt powłoki,<cmd>
który znajduje się w twoim$PATH
lub bieżącym katalogu w bieżącym procesie powłoki. To musi być czytelne. Jest to alias polecenia powłokisource
.źródło
. <cmd>
wyszuka program w,$PATH
a jeśli nie zostanie znaleziony, to przeszuka bieżący katalog.. ./cmd
./cmd
używa jawnej ścieżki (./
- bieżący katalog) do pliku wykonywalnego. I nie trzeba zaczynać#!
.. cmd
- (akasource
) - wbudowane polecenie bash. Jedną z widocznych różnic w wykonywaniusource
jest to, że może ustawić / zmodyfikować zmienną środowiskową bieżącej powłoki.źródło
source
jest to tylko pseudonim bash.
(który jest standardem)