Powłoka rc to prosty i innowacyjny interpreter poleceń zbudowany dla rodziny systemów operacyjnych Plan 9. Obecnie jest częścią plan9portktóry jest pakietem oprogramowania Plan 9 dostępnym dla systemu Linux.
Rc ma na celu ulepszenie domyślnej powłoki UNIX i wprowadza czystszą składnię do pisania skryptów. Jest również zbudowany tak, aby był jak najprostszy do zrozumienia. To sprawia, że rc jest dobrym programem dla kogoś, kto chce nauczyć się, jak działa powłoka.
Czym jest plan 9?
W podstawowym sensie Plan 9 jest następcą systemu operacyjnego UNIX. Został opracowany przez Bell Labs jako eksperymentalny projekt od wczesnych lat 80. do 2015 r. Od tego czasu grupa wolontariuszy zajmuje się obsługą systemu operacyjnego i do dziś widzi sporadyczne aktualizacje.

Plan 9 ma na celu stworzenie prostego i przystępnego systemu zarówno dla programistów, jak i użytkowników. Czyni to poprzez wdrażanie i ulepszanie podstawowej koncepcji UNIX. Jako taki, Plan 9 zawiera wiele podobnych poleceń do UNIXa i innych uniksopodobnych, takich jak cp
, mv
oraz rm
.
Co więcej, dodaje również szereg nowych narzędzi i funkcji, które są unikalne dla systemu operacyjnego. Na przykład sam to potężny edytor tekstu, który można w pełni kontrolować za pomocą wyrażeń regularnych.

Jedną z najbardziej innowacyjnych funkcji Planu 9 jest powłoka rc. Jest to interpreter poleceń podobny do Bash i umożliwia tworzenie skryptów, które następnie można wykorzystać do zautomatyzowania maszyny. rc ma również na celu uproszczenie tworzenia tych skryptów poprzez usunięcie wszystkich niepotrzebnych i zbędnych funkcji.

Instalowanie powłoki RC
Instalacja powłoki rc w Linuksie jest stosunkowo prosta.
- Skopiuj repozytorium Git narzędzi Plan 9 na swój komputer. Możesz to zrobić, instalując Git i uruchamiając następujące polecenia:
git clone https://github.com/9fans/plan9port.git /home/$USER/plan9port cd plan9port
- Następnie uruchom skrypt instalacyjny dołączony do repozytorium. Jest to prosty skrypt, który kompiluje konstruktora Planu 9, który z kolei kompiluje pozostałe narzędzia. Aby to zrobić, musisz uruchomić:

- Po zakończeniu możesz teraz korzystać z narzędzi Plan 9, przechodząc do katalogu bin repozytorium. Na przykład wpiszemy
./bin/acme
do uruchomienia graficznego edytora tekstu.

- Ważną rzeczą do zapamiętania jest to, że te polecenia będą działać tylko wtedy, gdy jesteś w katalogu „bin” plan9port. Aby użyć ich gdzie indziej, musisz dodać ten konkretny katalog do zmiennej „PATH”. Aby to zrobić, musisz otworzyć plik „.bash_profile” w swoim katalogu domowym:
nano /home/$USER/.bash_profile
- Dodaj następujący ciąg tekstu na końcu zmiennej „PATH”:
:/home/$USER/plan9port/bin/

Zapisz i wyjdź z pliku, a następnie zrestartuj powłokę rc.
Używanie i pisanie podstawowych skryptów RC
Gdy to zrobisz, możesz teraz zacząć pisać skrypty w rc. Aby uzyskać dostęp do tej powłoki, wystarczy uruchomić następujące polecenie:
Spowoduje to zmianę monitu terminala na „%”. Oznacza to, że jesteś teraz w powłoce rc. Stąd nadal możesz uzyskać dostęp do wszystkich swoich plików, a także tradycyjnych poleceń systemu Linux. Na przykład wpiszemy ls
aby uzyskać listę bieżącego katalogu.

Zmienne i operatory plików
Jednym z najczęstszych zastosowań języka powłoki jest przechowywanie dowolnych wartości oraz manipulowanie plikami. Pod tym względem powłoka rc zachowuje się dokładnie jak Bash.
- Napiszemy, co następuje, aby utworzyć zmienną o nazwie „test” i przypisać jej słowo „hello”:
- Następnie wpiszemy następujące polecenie, aby dołączyć zmienną testową do pliku „world.txt”:
- Z drugiej strony możliwe jest również poinstruowanie operatora odczytu, aby używał zawartości pliku jako danych wejściowych dla programu:

Korzystanie z rur UNIX w powłoce RC
Inną powszechną funkcją w językach powłoki jest możliwość tworzenia potoków UNIX. Jest to specjalny typ operatora pliku, w którym można przekazać dane wyjściowe jednego programu do danych wejściowych innego programu.
Podobnie do powyższych funkcji, rc shell w dużej mierze stosuje tradycyjną składnię Bash podczas tworzenia potoków UNIX.
- Uruchomimy następujące polecenie, aby przekazać zawartość pliku „world.txt” do pagera systemowego:
- Powinniśmy tutaj zauważyć, że potoki UNIX w rc są nieliniowe. Oznacza to, że możliwe jest przekazanie danych wyjściowych z dwóch aktywnych programów w jednym wejściu programu. Na przykład możemy uruchomić następujące polecenie, aby porównać wyniki dwóch programów:
cmp <{echo hello} <{echo helloo}

Łączenie poleceń w Rc Shell
Oprócz używania potoków UNIX, możliwe jest również łączenie różnych poleceń w powłoce rc. Pozwala to na uruchamianie programów po kolei bez konieczności wpisywania ich w osobnych wierszach. Sprawdź to polecenie, które pozwala ci uruchomić less
po bieganiu echo
:
echo hello-world >> hello.txt; less hello.txt
Co więcej, rc pozwala również sprawdzić kod statusu programu przed przejściem do sąsiedniego polecenia. Może to być przydatne, jeśli Twój program zależy od sukcesu lub niepowodzenia innych programów.
W tym celu rc udostępnia dwa operatory: &&
” oraz ||
. Są to znaki specjalne, których możesz użyć do zastąpienia symbolu średnika.
- The
&&
Operator mówi rc, aby łączył i uruchamiał programy, o ile polecenie po lewej stronie działa pomyślnie. Jest to pomocne w sytuacjach, w których cały łańcuch musi działać poprawnie. - The
||
operator mówi rc, aby łączył i uruchamiał programy, jeśli polecenie po lewej stronie nie działa. W przeciwieństwie do poprzedniego operatora, jest to niezwykle przydatne, jeśli próbujesz naprawić błędy w swoich skryptach i programach.
Wiedząc o tym, możesz użyć tych operatorów do tworzenia poleceń, które mogą kolejkować i sprawdzać programy. Na przykład poinstruujemy rc, aby tylko uruchamiał touch
jeśli mkdir
działa pomyślnie:
mkdir ./hello && touch ./hello/world

Używanie ciągów i list w powłoce RC
Jedną z największych różnic między Bash a powłoką rc jest skupienie się na uproszczeniu używania zwykłego tekstu. W tradycyjnej powłoce tekst i łańcuchy są często trudne do zadeklarowania w funkcjach i zmiennych.
Ten problem wynika częściowo z faktu, że istnieją dwa sposoby deklarowania ciągu w Bash. Możliwe jest ujęcie tekstu zarówno w pojedynczych, jak i podwójnych cudzysłowach, aby traktować słowo jako ciąg.

W związku z tym rc dąży do zmniejszenia tej złożoności, używając tylko pojedynczych cudzysłowów podczas deklarowania łańcuchów. Dzięki temu możesz bez problemu używać znaków specjalnych i kontrolnych.
Używając tego polecenia zamienimy nawias kwadratowy w ciąg bez żadnych znaków ucieczki:
# rc hello='[world]' # bash hello='\[world\]'
Co więcej, rc pozwala również manipulować tymi zmiennymi łańcuchowymi i bezpośrednio kompilować je jako listę. Może to być szczególnie przydatne, jeśli chcesz utworzyć skrypt przechowujący zmienne w prostej tablicy.
Aby to zrobić, wystarczy umieścić grupę ciągów w nawiasach. W związku z tym napiszemy, co następuje, aby utworzyć zmienną z 5 elementami w środku:
shop=(eggs milk cheese rice beef)
Wiedząc o tym, możesz użyć różnych poleceń, aby wyciągnąć dane z tablicy. Na przykład to polecenie wyciągnie pierwsze trzy elementy tablicy:

Podstawowa kontrola przepływu w powłoce RC
Oprócz bycia prostą powłoką, rc jest również pełnym językiem programowania. Oznacza to, że jest zdolny nie tylko do podstawowej manipulacji ciągami znaków, ale także do logicznego rozgałęziania podobnego do Pythona.

Rc pozwala na łatwe tworzenie instrukcji if-then, pętli for oraz możliwość definiowania złożonych funkcji. Może to być niezwykle pomocne, jeśli dopiero zaczynasz programowanie.
Korzystanie z instrukcji warunkowych
Jedną z najbardziej podstawowych cech języków programowania jest możliwość tworzenia instrukcji warunkowych. Są to struktury, które mówią programowi, co ma robić w zależności od okoliczności, w jakich się znajduje. Na przykład możesz powiedzieć programowi, aby działał tylko wtedy, gdy ma wartość 1.

Możesz napisać instrukcję warunkową dla rc w jednym wierszu:
- Pole „warunek” to lista poleceń, które rc będzie próbował wykonać. Sposób, w jaki to działa, polega na tym, że każdy program, który pomyślnie się uruchamia, zapewnia wartość „prawda”.
- Z drugiej strony, pole „program” zależy od wartości „prawda” pola warunku, aby uruchomić dowolne polecenie, które mu wydasz.
W przeciwieństwie do Bash, to podejście pozwala na użycie prawie każdego typu programu do instrukcji warunkowej skryptu. Na przykład możesz powiedzieć rc, aby uruchamiał tę instrukcję tylko wtedy, gdy plik hello.world istnieje w bieżącym katalogu:
if ( test -r hello.world ) echo "there is a hello world!"
Tworzenie prostych pętli
Oprócz pisania instrukcji warunkowych, możliwe jest również użycie rc do tworzenia powtarzających się skryptów poprzez pętle. Pętla to struktura, która pozwala na powtarzanie określonego polecenia określoną liczbę razy.

Podobnie jak w przypadku instrukcji warunkowych, składnię pętli można zapisać w jednym wierszu:
for ( i in step ) program
- Pole „krok” może być albo zmienną, albo programem, przez który rc będzie przechodził jeden po drugim. Na przykład napisanie listy tutaj powie rc, aby przejrzał każdy element listy.
- Pole „program” to wiersz kodu, który rc ma uruchamiać za każdym razem, gdy przechodzi przez pole step.
Tworzenie funkcji w Rc
Wreszcie, możliwe jest również utworzenie ogólnej funkcji w rc. Podobnie jak w przypadku innych języków programowania, jest to struktura, którą można zdefiniować w celu wykonania niestandardowego zadania.

Na przykład poniższy kod utworzy funkcję, która używa zarówno instrukcji warunkowych, jak i pętli for:
fn hello { for (i in ./hello/) if(test -r ./hello/$i) echo "There is a file here!" }
Choć może się to wydawać skomplikowane, napisanie funkcji jest niezwykle proste. W swej istocie podstawowa składnia funkcji rc wygląda mniej więcej tak:
- Pole „name” informuje rc o etykiecie konkretnej funkcji. Może to być szczególnie przydatne, jeśli chcesz ponownie użyć tej samej funkcji do późniejszego polecenia.
- Z drugiej strony pole „funkcja” zawiera wszystkie zmienne i polecenia, które chcesz uruchomić.
Często Zadawane Pytania
Czy można poznać liczbę elementów na liście w Rc?
TAk! Możliwe jest sprawdzenie całkowitej ilości zmiennych na liście rc. Podobnie jak w przypadku uzyskiwania elementów listy, możesz to zrobić, dodając symbol podwójnego cudzysłowu („) przed nazwą listy. Na przykład możemy wpisać echo $"shop
aby wydrukować całkowitą liczbę elementów, które zapisaliśmy w zmiennej shop.
Czy w RC można tworzyć nieskończone pętle?
TAk! Możliwe jest tworzenie pętli w powłoce rc, które się nie kończą. Chociaż powyższe przykłady pokazują skończone pętle, tworzenie nieskończonych pętli jest równie proste. Aby to zrobić, wystarczy usunąć dowolny warunek w polu kroku. Ważną rzeczą, na którą należy zwrócić uwagę, jest jednak to, że nadal musisz umieścić nawias w polu kroku, aby uzyskać nieskończoną pętlę. Dzieje się tak, ponieważ powłoka rc została zaprojektowana do rozpoznawania tylko funkcji o określonej składni i strukturze. Na przykład polecenie for(i) echo hello
powie rc, aby drukował słowo „hello” w nieskończoność.
Czy można przekazać błędy w Rc podobne do > 2 w Bash?
TAk! Domyślnie rc umożliwia oddzielenie wszelkich danych diagnostycznych od programu. Może to być przydatne, jeśli próbujesz rozwiązać problem z uruchomionym skryptem lub programem. Mając to na uwadze, możesz oddzielić ten typ danych wyjściowych za pomocą „>[2=1]operator pliku. Na przykład możemy wypisać wszelkie błędy w naszym skrypcie, uruchamiając następujące polecenie: ./script.rc >[2=1] ./error.log
.
Kredyty obrazkowe: Unsplash Wszystkie zrzuty ekranu autorstwa Ramces Red
Czy ten artykuł jest przydatny?
Zapisz się do naszego newslettera!
Nasze najnowsze samouczki dostarczane prosto do Twojej skrzynki odbiorczej