Termin „shell” jest dobrze nazwany. Jest to dosłownie powłoka wokół systemu operacyjnego, pozwalająca użytkownikowi na interakcję z komputerem. Kiedy został pierwotnie opracowany, było bardzo mało graficznych interfejsów użytkownika (bez okien :(). Wszystko zostało zrobione z linii poleceń. Ale nawet linia poleceń potrzebowała miejsca do życia. Żył i nadal działa w powłoce .
Mówiąc prościej, aby wiersz poleceń był użyteczny, potrzebował instrukcji, które mógłby wywołać. Tak więc programy zostały uruchomione w powłoce, aby można było z niej korzystać z wiersza poleceń. Programy były ściśle zgrupowane w swoich własnych pakietach i miały współpracować. Obejmują one programy takie jak „ls” i „grep”, „ps”, „sed” itp. Zawierają także polecenia przekierowania plików, takie jak „>” i „<” oraz potoki („|”). Co ważniejsze, obejmują one także konstrukcje programistyczne, takie jak operacje warunkowe (jeśli zatem, dla pętli, podczas gdy pętle, sposoby sprawdzania statusu zwróconego po uruchomieniu instrukcji (np. Jeśli uruchomisz „ls”, czy coś znalazło?), Rzecz tak). Są to podstawy bardziej złożonych skryptów wiersza poleceń (powłoki),
Kiedy ktoś używa terminu „Bash Shell”, mówi o interprecie wiersza poleceń o nazwie „Bash”, który działa w powłoce O / S. Można by pomyśleć, że jest to skrót od „Bash Shell Interpreter”. Istnieją inni tłumacze, tacy jak Bourne (Bash to „nowa i ulepszona powłoka Bourne'a, w skrócie Bourne Again Shell”). Istnieje również C-Shell, K-Shell (ulubiony przez wielu, którzy piszą złożone skrypty powłoki) oraz inne warianty GNU. Z biegiem lat zwyczajem stało się odwoływanie się do konkretnego interpretera wiersza poleceń, którego używasz jako powłoki, ponieważ jednego nie można używać bez drugiego. Ale w rzeczywistości są one różne.
Co do tego, dlaczego są oni właściwie znani jako interpretery wiersza poleceń, a nie jako rzeczywista powłoka: dzieje się tak dlatego, że żyją w powłoce i interpretują wszystkie polecenia tak, jakby działały w programie. A powłoka nie dba o tłumacza, który w nim działa, o ile spełnia ona odpowiednie standardy.
A dlaczego nazywają się tłumaczami, to dlatego, że są naprawdę tłumaczami. Nawet jeśli nie uruchamiasz jawnie skryptu (a skrypt jest tak naprawdę plikiem tekstowym poleceń, które tworzysz, abyś mógł wykonywać te same polecenia w kółko, bez konieczności ich ponownego wpisywania). Na przykład weź pokorne polecenie „ls”. Po uruchomieniu zwraca listę plików. Ale to, jak działa, jest ważniejsze dla twojego pytania: w rzeczywistości działa w kontekście interpretera wiersza poleceń, nawet jeśli po prostu uruchomisz coś, co wydaje się prostym, jednorazowym poleceniem. Oznacza to, że działa jak oświadczenie w ramach większego programu. Działa tak, jakby znajdował się w pliku skryptu powłoki, ale tak naprawdę nie znajduje się w pliku skryptu powłoki. Anonimowy plik skryptu powłoki.
Wszystko, co uruchamiasz w wierszu poleceń, ma to wspólnego (niezależnie od tego, czy jest to pojedyncze polecenie, takie jak „ls”, czy plik skryptowy pełen poleceń, iteratorów i instrukcji warunkowych): wszystko jest przetwarzane przez interpreter wiersza poleceń; czy to Bash, C-Shell, K-Shell (domyślnie w AIX btw).
Aby zobaczyć, co mam na myśli, wykonaj „test” katalogu:
mkdir test
Wpisz go i uruchom następujące polecenia
grep hello *
Otrzymasz odpowiedź w rodzaju „brak takiego pliku lub katalogu”. Teraz wpisz polecenie
echo $?
($? mówi, powiedz mi, co znalazłeś w mowie zaszyfrowanego komputera.) Powinieneś zobaczyć, że zwraca liczbę (powinna być) „2”. To jest kod powrotu z grep, który oznacza „brak takiego pliku lub katalogu”. Teraz uruchom następujące polecenie:
echo hello > hello.txt
grep hello *
echo $?
Zobaczysz plik „hello.txt” zwrócony z początkowej komendy grep i powinieneś teraz zobaczyć „echo $?” zwraca liczbę „0”, co oznacza, że faktycznie coś znalazło.
Nawet jeśli te pozornie jednorazowe polecenia są uruchamiane, interpreter wiersza poleceń działa tak, jakby był częścią większego programu i śledzi ich zwracane wartości. Dlatego jeśli zapomnisz * na końcu polecenia grep, nie powróci. Wie, że instrukcja jest niekompletna i oczekuje więcej danych wejściowych. W końcu możesz poprosić go o pomijanie wyników jakiejś pętli, której pisanie i uruchamianie w wierszu poleceń jest całkowicie legalne.
Najważniejsze jest to, że powłoka jest powłoką, a interpreter (bez względu na to, jakiej używasz, „Bash”, k-shell itp.) Jest inny. Ale często są one używane zamiennie, ponieważ w dowolnym momencie są całkowicie ze sobą powiązane.