bash4.3 # pwd
/bin
bash4.3 # ll sh
lrwxrwxrwx. 1 root root 4 May 17 22:22 sh -> bash
bash4.3 # ll bash
-rwxr-xr-x. 1 root root 1072056 May 17 22:22 bash
bash4.3 # bash
bash4.3 # sh
sh-4.3#
Mój system operacyjny to fedora 24 (domyślna wersja GNOME).
Z przykładu możemy wiedzieć: under /bin
, bash
jest binarnym plikiem wykonywalnym; sh
to miękki link do bash
.
Tak więc, o type bash and press enter
ile mi wiadomo, powinien mieć dokładnie taki sam wynik jak type sh and press enter
.
Kiedy type bash and press enter
dostaję [root@localhost bin]#
zgodnie z oczekiwaniami.
Jednak jeśli ja type sh and press enter
, to zaskakująco sh-4.3#
.
Co jest przyczyną
Odpowiedzi:
To udokumentowana funkcja.
Jeśli uruchomisz bash za pomocą dowiązania symbolicznego
sh
, bash rozpocznie się wsh
trybie zgodności.Od
man bash
:Skąd program wie, jakiej nazwy użyto do jego uruchomienia?
Jeśli jest to program ac, może to sprawdzić
argv[0]
. Jeśli jest to skrypt powłoki lub perla, może to sprawdzić$0
.Jako przykład rozważmy ten prosty skrypt powłoki:
$0
to nazwa, z której skrypt został wywołany.${0##*/}
to nazwa wywołania skryptu z usuniętymi nazwami katalogów.Stwórzmy to dowiązanie symboliczne:
Tak,
utc
iet
oba uruchomić ten sam plik wykonywalny ale zapewniają różne wyniki. Po uruchomieniu jakoutc
wyświetla czas uniwersalny. Po uruchomieniu jakoet
, wyprowadza czas wschodni USA. Na przykład:źródło
argv[0]
, obvs)