Jest to polecenie rc, które można uruchomić u dostawcy bezpłatnego hostingu OnWorks przy użyciu jednej z wielu naszych bezpłatnych stacji roboczych online, takich jak Ubuntu Online, Fedora Online, emulator online systemu Windows lub emulator online MAC OS
PROGRAM:
IMIĘ
rc - powłoka
STRESZCZENIE
rc [-deiIlnopsvx] [-c komenda] [argumenty]
OPIS
rc jest interpreterem poleceń i językiem programowania podobnym do sh(1). Opiera się na
Powłoka AT&T Plan 9 o tej samej nazwie. Powłoka oferuje składnię podobną do języka C (znacznie większą niż
powłoka C) i potężny mechanizm manipulowania zmiennymi. Jest w miarę mały
i dość szybko, zwłaszcza w porównaniu ze współczesnymi pociskami. Jego użycie jest zamierzone
być interaktywny, ale język dobrze nadaje się do skryptów.
OPCJE
-c Jeśli występuje -c, polecenia są wykonywane od bezpośrednio następującego argumentu.
Wszelkie dalsze argumenty za rc umieszczane są w $*. Zatem:
rc -c 'echo $*' 1 2 3
drukuje
1 2 3
-d Ta flaga powoduje rc nie ignorować SIGQUIT ani SIGTERM. Zatem rc można zmusić do zrzucenia
rdzeń, jeśli został wysłany SIGQUIT. Ta flaga jest przydatna tylko do debugowania rc.
-e Jeśli flaga -e jest obecna, to rc zakończy działanie, jeśli status wyjścia polecenia to
fałsz (niezerowy). rc nie zakończy jednak działania, jeśli warunek się nie powiedzie, np. if()
dowództwo.
-i Jeśli flaga -i jest obecna lub jeśli wejście do rc pochodzi z terminala (zgodnie z ustaleniami
by niespokojny(3)) wtedy rc będzie w interaktywne tryb. To znaczy monit (od
$podpowiedź(1)) zostanie wydrukowany przed pobraniem linii wejściowej, oraz rc zignoruje
SIGINT.
-I Jeśli flaga -I jest obecna lub jeśli wejście do rc w takim razie nie pochodzi z terminala rc
nie będzie w trybie interaktywnym. Żadne monity nie zostaną wydrukowane, a SIGINT spowoduje
rc do wyjścia.
-l Jeśli flaga -l jest obecna, lub if rcargv[0][0] jest zatem myślnikiem (-). rc będą mieć
jako powłoka logowania. Oznacza to, że uruchomi polecenia z $home/.rcrc, jeśli ten plik
istnieje, przed odczytaniem jakichkolwiek innych danych wejściowych.
-n Ta flaga powoduje rc odczytać jego dane wejściowe i przeanalizować je, ale nie wykonać żadnego
polecenia. Jest to przydatne do sprawdzania składni skryptów. Jeśli jest używany w połączeniu
z flagą -x, rc wypisze każde polecenie po jego przeanalizowaniu w formie podobnej do
ten używany do eksportowania funkcji do środowiska.
-o Ta flaga zapobiega zwykłej praktyce prób otwarcia pliku /dev/null
deskryptory 0, 1 i 2, jeśli którykolwiek z tych deskryptorów jest dziedziczony jako zamknięty.
-p Ta flaga zapobiega rc od inicjowania funkcji powłoki ze środowiska. Ten
pozwala rc działać w trybie chronionym, przez co staje się to trudniejsze dla an rc
skrypt, który ma zostać obalony poprzez umieszczenie fałszywych poleceń w środowisku. (Zauważ to
obecność tej flagi tak nie oznacza, że można bezpiecznie uruchomić setuid rc skrypty;
nadal obowiązują zwykłe zastrzeżenia dotyczące bitu setuid.)
-s Ta flaga powoduje rc czytać ze standardowego wejścia. Wszelkie argumenty są umieszczane w $*.
-v Ta flaga powoduje rc aby wyświetlić echo swoich danych wejściowych i wyświetlić błąd standardowy podczas odczytu.
-x Ta flaga powoduje rc aby wydrukować każde polecenie w przypadku błędu standardowego przed jego wykonaniem.
Może się przydać do debugowania rc skrypty.
POLECENIA
Proste polecenie to ciąg słów oddzielonych białymi znakami (spacją i tabulatorem)
znaki kończące się znakiem nowej linii, średnikiem (;) lub ampersandem (&). Pierwsze słowo A
polecenie to nazwa tego polecenia. Jeśli nazwa zaczyna się od /, ./ lub ../, to nazwa
jest używana jako bezwzględna nazwa ścieżki odnosząca się do pliku wykonywalnego. W przeciwnym razie nazwa
polecenie jest sprawdzane w tabeli funkcji powłoki, poleceń wbudowanych lub w postaci pliku
katalogi nazwane przez $path.
Tło Zadania
W tle uruchamiane jest polecenie zakończone znakiem &; to znaczy, powłoka natychmiast powraca
zamiast czekać na zakończenie polecenia. Polecenia w tle mają /dev/null
podłączone do ich standardowego wejścia, chyba że istnieje wyraźne przekierowanie dla standardowego wejścia
używany.
Podpowłoki
Polecenie poprzedzone znakiem at (@) jest wykonywane w podpowłoce. To izoluje
powłokę nadrzędną przed skutkami operacji zmiany stanu, takich jak a cd lub zmienna
zadanie. Na przykład:
@ {płyta CD ..; robić}
będzie działać robić(1) w katalogu nadrzędnym (..), ale pozostawia powłokę działającą w bieżącym
katalogiem.
Linia kontynuacja
Długa linia logiczna może być kontynuowana na kilku liniach fizycznych poprzez zakończenie każdej linii
(z wyjątkiem ostatniego) z ukośnikiem odwrotnym (\). Sekwencja ukośnika odwrotnego i nowej linii jest traktowana jako a
przestrzeń. Ukośnik odwrotny nie jest poza tym czymś wyjątkowym rc. (Dodatkowo, cytaty wewnętrzne a
ukośnik odwrotny traci swoje specjalne znaczenie nawet wtedy, gdy następuje po nim znak nowej linii.)
Cytowanie
rc specjalnie interpretuje kilka znaków; znaki specjalne automatycznie się kończą
słowa. Następujące znaki są specjalne:
#; & | ^ $ = ` ' { } ( ) < >
Pojedynczy cudzysłów (') zapobiega specjalnemu traktowaniu jakiegokolwiek znaku innego niż on sam. Wszystko
znaków, w tym znaków kontrolnych, nowych wierszy i ukośników odwrotnych między dwoma cudzysłowami
znaki są traktowane jako nieinterpretowany ciąg znaków. Sam znak cudzysłowu może być cytowany
umieszczając dwa cudzysłowy z rzędu. Minimalna sekwencja potrzebna do wprowadzenia znaku cudzysłowu
Jest ''''. Pusty ciąg znaków jest reprezentowany przez „”. Zatem:
echo „Jaki jest plan, Stan?”
drukuje
Jaki jest plan, Stan?
Znak cyfry (#) rozpoczyna komentarz rc. Wszystkie znaki do, ale z wyłączeniem
następny znak nowej linii jest ignorowany. Zauważ, że kontynuacja ukośnika odwrotnego nie działa wewnątrz a
komentarz, tzn. ukośnik odwrotny jest ignorowany wraz ze wszystkim innym.
Grupowanie
Zero lub więcej poleceń może być pogrupowanych w nawiasy klamrowe („{” i „}”) i są wtedy traktowane jako
jedno polecenie. Nawiasy klamrowe nie definiują inaczej zakresu; służą tylko do dowodzenia
grupowanie. W szczególności uważaj na polecenie:
dla (i) {
komenda
} | Komenda
Ponieważ potok wiąże się mocniej niż for, to polecenie nie wykonuje tego, czego oczekuje użytkownik
Do. Zamiast tego ujmuj całość instrukcji for w nawiasy klamrowe:
{dla (i) polecenia} | Komenda
Na szczęście, rcGramatyka jest na tyle prosta, że (pewny siebie) użytkownik może ją zrozumieć
badanie szkieletu Yacc(1) gramatyka na końcu tej strony podręcznika (patrz sekcja
prawo GRAMATYKA).
Wkład oraz wydajność
Standardowe wyjście może zostać przekierowane do pliku z
polecenie > plik
a standardowe wejście można pobrać z pliku z
polecenie <plik
Przekierowania mogą pojawić się w dowolnym miejscu wiersza: słowo następujące po symbolu przekierowania to
nazwa pliku i musi być ujęta w cudzysłowy, jeśli zawiera spacje lub inne znaki specjalne. Te
wszystkie są równoważne.
echo 1 2 3 > foo
> foo echo 1 2 3
echo 1 2 > foo 3
Można także określić deskryptory plików inne niż 0 i 1. Na przykład, aby przekierować
standardowy błąd do pliku, użyj:
polecenie > [2] plik
Aby zduplikować deskryptor pliku, użyj >[n=m]. Zatem przekierowanie zarówno standard
wyjście i błąd standardowy do tego samego pliku, użyj
polecenie > plik >[2=1]
Jak w sh, przekierowania są przetwarzane od lewej do prawej. Stąd ta sekwencja
polecenie >[2=1] > plik
zwykle jest błędem. Najpierw powiela błąd standardowy na standardowe wyjście; Następnie
przekierowuje standardowe wyjście do pliku, pozostawiając standardowy błąd w miejscu standardowego wyjścia
pierwotnie był.
Aby zamknąć deskryptor pliku, który może być otwarty, użyj >[n=]. Na przykład, aby zamknąć plik
deskryptor 7:
komenda >[7=]
Należy pamiętać, że w tych konstrukcjach nie mogą pojawiać się spacje:
polecenie > plik [2].
wyśle wynik polecenia do pliku o nazwie [2] z zamierzoną nazwą pliku
pojawiające się na liście argumentów polecenia.
Aby umieścić dane wyjściowe polecenia na końcu już istniejącego pliku, użyj:
polecenie >> plik
Jeśli plik nie istnieje, zostanie utworzony.
„Tutaj dokumenty” są obsługiwane jak w sh przy użyciu
polecenie << 'eof-marker'
Kolejne linie tworzą standardowe wejście polecenia, aż do linii zawierającej tylko
napotkano znacznik, w tym przypadku eof-marker.
Jeżeli znacznik końca pliku jest ujęty w cudzysłów, wówczas nie następuje podstawienie zmiennej
wewnątrz tego dokumentu. W przeciwnym razie każda zmienna jest zastępowana przez jej spację
wartość listy rozdzielonej (patrz Mieszkanie wykazy, poniżej) i jeśli po zmiennej następuje znak ^
imię i nazwisko, zostaje ono usunięte. Pozwala to na jednoznaczne użycie zmiennych sąsiadujących z tekstem, np
$zmienna^śledź
Aby dołączyć dosłowny znak $ w dokumencie here, gdy umieszczany jest niecytowany znacznik końca pliku
używany, wpisz go jako $$.
Dodatkowo, rc obsługuje „ciągi tutaj”, które są jak dokumenty tutaj, z wyjątkiem tego wejścia
jest pobierany bezpośrednio z ciągu znaków w wierszu poleceń. Ich zastosowanie zilustrowano tutaj:
cat <<< 'to jest ciąg znaków' | toaleta
(Ta funkcja umożliwia rc eksportować funkcje wykorzystujące tutaj dokumenty do środowiska;
autor nie oczekuje, że użytkownicy uznają tę funkcję za przydatną.)
Rury
Dwa lub więcej poleceń można połączyć w potoku, umieszczając pomiędzy nimi pionową kreskę (|).
ich. Standardowe wyjście (deskryptor pliku 1) polecenia po lewej stronie jest powiązane z
standardowe wejście (deskryptor pliku 0) polecenia po prawej stronie. Notacja |[n=m]
wskazuje ten deskryptor pliku n lewego procesu jest połączona z deskryptorem pliku m of
właściwy proces. |[n] to skrót od |[n=0]. Na przykład, aby potokować standard
błąd polecenia wc(1), użyj:
polecenie |[2] wc
Podobnie jak w przypadku przekierowań plików, w konstrukcji określającej numerowany plik nie mogą występować spacje
deskryptory.
Status wyjścia potoku jest uważany za prawdziwy wtedy i tylko wtedy, gdy każde polecenie w
potok wychodzi true.
Polecenia as Argumenty
Niektóre polecenia, np CMP(1) lub diff(1), weź ich argumenty w wierszu poleceń i wykonaj
nie czyta wejścia ze standardowego wejścia. Czasami wygodnie jest budować nieliniowo
potoki, aby polecenie takie jak CMP może odczytać dane wyjściowe dwóch innych poleceń jednocześnie.
rc czy to tak:
cmp <{polecenie} <{polecenie}
porównuje dane wyjściowe dwóch poleceń w nawiasach klamrowych. Uwaga: ponieważ ta forma przekierowania
jest zaimplementowany za pomocą jakiegoś potoku, a ponieważ nie można szukam(2) na rurze, polecenia
to zastosowanie szukam(2) zawiśnie. Na przykład niektóre wersje diff(1) użyj szukam(2) na ich
wejścia.
Dane można przesłać potokiem do kilku poleceń za pomocą trójnik(1) i wersja wyjściowa
ten zapis:
echo cześć | trójnik >{sed 's/^/p1 /'} >{sed 's/^/p2 /'}
CONTROL STRUKTURY
Do kontroli przepływu można zastosować następujące elementy rc:
Jeśli inaczej Oświadczenia
Jeśli (test) {
cmd
} w przeciwnym razie cmd
test jest wykonywany, a jeśli jego status zwrotu wynosi zero, pierwsze polecenie jest
wykonany, w przeciwnym razie drugi. Nawiasy klamrowe nie są obowiązkowe wokół poleceń.
Jednakże instrukcja else jest poprawna tylko wtedy, gdy następuje po nawiasie zamkniętym
linia. W przeciwnym razie if przyjmuje się proste-if:
jeśli (test)
komenda
Kompletujemy wszystkie dokumenty (wymagana jest kopia paszportu i XNUMX zdjęcia) potrzebne do oraz Dla litu szacuje się Metalowe ramki
dopóki (test) cmd
rc wykonuje test i wykonuje polecenie tak długo, jak test jest prawdziwy.
dla (było in podstęp) cmd
rc zestawy było do każdego elementu podstęp (które mogą zawierać zmienne i backquote
zmiany) i biegi cmd. Jeśli „w podstęp” zostaje zatem pominięte rc ustawi było do każdego
element $*. Na przykład:
for (i in `{ls -F | grep '\*$' | sed 's/\*$//'}) {polecenia}
ustawi $i na nazwę każdego pliku wykonywalnego w bieżącym katalogu.
Przełącznik
przełącznik (podstęp) { sprawa ... }
rc zagląda do nawiasów klamrowych po przełączeniu na instrukcje rozpoczynające się od słowa
sprawa. Jeśli którykolwiek z poniższych wzorców pasuje do listy dostarczonej do przełączenia,
następnie wykonywane są polecenia aż do następnej instrukcji case. The
metaznaki *, [ lub ? nie należy cytować; dopasowywanie odbywa się tylko względem
struny w podstęp, a nie względem nazw plików. (Dopasowanie do instrukcji case to
tak samo jak w przypadku polecenia ~.)
logiczny Operatorzy
W firmie działa wielu operatorów rc które zależą od statusu wyjścia polecenia.
polecenie && polecenie
wykonuje pierwsze polecenie, a następnie wykonuje drugie polecenie wtedy i tylko wtedy, gdy pierwsze
polecenie kończy działanie z zerowym statusem wyjścia („true” w systemie Unix).
polecenie || Komenda
wykonuje pierwsze polecenie, a następnie wykonuje drugie polecenie wtedy i tylko wtedy, gdy pierwsze
polecenie kończy działanie z niezerowym kodem wyjścia („false” w systemie Unix).
! Komenda
neguje status wyjścia polecenia.
WZÓR PASUJĄCY
Istnieją dwie formy dopasowywania wzorców rc. Jednym z nich jest tradycyjny efekt kulowania powłoki. Ten
występuje podczas dopasowywania nazw plików na listach argumentów:
polecenie argument argument ...
Gdy znaki *, [ lub ? wystąpić w argumencie lub poleceniu, rc patrzy na argument
jako wzór dopasowywania do plików. (W przeciwieństwie do zachowania innych muszli,
rc wykona dopasowanie wzorca tylko wtedy, gdy metaznak występuje bez cudzysłowu i dosłownie
wejście. Zatem,
foo='*'
powtórz $foo
zawsze będzie echem tylko gwiazdy. Aby rozszerzyć nieliteralne metaznaki, an
Aby ponownie przeskanować dane wejściowe, należy użyć instrukcji eval.) Następuje dopasowanie wzorca
zgodnie z następującymi zasadami: a * oznacza dowolną liczbę (włącznie z zerem) znaków.
A ? pasuje do dowolnego pojedynczego znaku, a [, po którym następuje liczba znaków, po których następuje
a ] pasuje do pojedynczego znaku w tej klasie. Zasady dopasowywania klas postaci to
takie same jak te dla ed(1), z tym wyjątkiem, że osiągana jest negacja klasy znaków
z tyldą (~), a nie daszkiem (^), ponieważ daszek już oznacza coś innego rc.
rc dopasowuje również wzorce do ciągów za pomocą polecenia ~:
~ wzór wzorca tematu ...
~ ustawia $status na zero wtedy i tylko wtedy, gdy dostarczony wzorzec pasuje do dowolnego pojedynczego elementu
lista przedmiotów. Zatem
~ fuj kurwa*
ustawia status na zero, podczas gdy
~ (bar baz) f*
ustawia stan na jeden. Lista null jest dopasowywana do listy null, więc
~ $foo ()
sprawdza, czy $foo jest puste, czy nie. Można to również osiągnąć za pomocą testu
~ $#foo 0
Zauważ, że wewnątrz polecenia ~ rc nie dopasowuje wzorców do nazw plików, więc tak nie jest
konieczne jest zacytowanie znaków *, [ i ?. Jednakże, rc rozwija temat
nazwy plików, jeśli zawierają metaznaki. Tym samym polecenie
~*?
zwraca wartość true, jeśli którykolwiek z plików w bieżącym katalogu ma nazwę jednoznakową.
Jeśli polecenie ~ otrzyma listę jako pierwszy argument, oznacza to pomyślne dopasowanie
dowolny element tej listy spowoduje, że ~ zwróci wartość true. Na przykład:
~ (foo goo zoo) z*
jest prawdziwy.
LISTY ROLNICZE ZMIENNE
Podstawowa struktura danych w rc to lista, która jest sekwencją słów. Zdanie wtrącone
służą do grupowania list. Pusta lista jest reprezentowana przez (). Listy nie mają hierarchii
Struktura; lista wewnątrz innej listy jest rozwijana, więc zewnętrzna lista zawiera wszystkie
elementy listy wewnętrznej. Zatem wszystkie poniższe są równoważne
raz Dwa Trzy
(raz Dwa Trzy)
((raz Dwa Trzy)))
Zauważ, że pusty ciąg znaków „” i lista pustych znaków (() to dwie bardzo różne rzeczy.
Przypisanie łańcucha pustego do zmiennej jest poprawną operacją, ale nie usuwa jej
definicja.
null = '' pusty = () echo $#null $#pusty
produkuje dane wyjściowe
1 0
Lista Powiązanie
Dwie listy można połączyć operatorem konkatenacji (^). Konkatenacja działa wg
zgodnie z następującymi regułami: jeśli dwie listy mają taką samą liczbę elementów, to
konkatenacja jest parami:
echo (a- b- c-)^(1 2 3)
produkuje dane wyjściowe
a-1 b-2 c-3
W przeciwnym razie co najmniej jedna z list musi zawierać pojedynczy element, a następnie
konkatenacja ma charakter rozdzielczy:
cc -^(O gc) (malloc alloca)^.c
ma skutek wykonania polecenia
cc -O -g -c malloc.c alloca.c
Pojedyncze słowo to lista o długości jeden, więc
echo foo^bar
produkuje dane wyjściowe
foobar
Bezpłatna rozmowa zapoznawcza Karety
rc wstawia karetki (operatory łączenia) za darmo w niektórych sytuacjach, aby
zaoszczędź trochę pisania w imieniu użytkownika. Na przykład powyższy przykład można również wpisać
w jako:
opts=(O gc) files=(malloc alloca) cc -$opts $files.c
rc dba o wstawienie wolnego karetki między „-” i $opts, a także między plikami $
i C. Zasada dotycząca bezpłatnych karetek jest następująca: jeśli słowo lub słowo kluczowe jest natychmiastowe
następnie inne słowo, słowo kluczowe, znak dolara lub cudzysłów rc wstawia karetkę
między nimi.
Zmienne
Listę można przypisać do zmiennej za pomocą zapisu:
było = podstęp
Do stosowania tej notacji można również przypisać zmienną specjalną *; rc nie ma zestaw wbudowany.
Można użyć dowolnego niepustego ciągu znaków, z wyjątkiem ciągu zawierającego tylko cyfry
jako nazwa zmiennej. Można użyć dowolnego znaku z wyjątkiem =, ale wymagane są znaki specjalne
zacytowany. Wszystkie zmienne zdefiniowane przez użytkownika są eksportowane do środowiska.
Do wartości zmiennej odwołuje się operator dolara ($):
$było
Każda zmienna, której nie przypisano wartości, zwraca listę pustą, (), kiedy
odwołuje się Dozwolone jest wiele odwołań:
a = fuj
b = a
echo $ $ b
wydruki
bla
Definicja zmiennej może być również usunięta poprzez przypisanie zmiennej listy null:
było=()
Aby „darmowa opieka” działała prawidłowo, rc musi przyjąć pewne założenia na temat czego
znaki mogą występować w nazwie zmiennej. rc zakłada, że nazwa zmiennej składa się wyłącznie z
znaków alfanumerycznych, podkreślenia (_) i gwiazdki (*). Aby odwołać się do zmiennej za pomocą
inne znaki w jej nazwie, podaj nazwę zmiennej. Zatem:
echo $'we$Ird:Zmienna!le'
Lokalny Zmienne
Dowolna liczba przypisań zmiennych może być lokalna dla pojedynczego polecenia, wpisując:
a=foo b=bar ... polecenie
Polecenie może być poleceniem złożonym, na przykład:
ścieżka=. jeśli=() {
...
}
ustawia ścieżkę do . i usuwa ifs na czas jednego długiego polecenia złożonego.
Zmienna Subskrypcje
Zmienne mogą być indeksowane zapisem
$zmienna(n)
gdzie n jest listą liczb całkowitych (pochodzenie 1). Zaraz po nim musi nastąpić nawias otwierający
nazwę zmiennej. Lista indeksów dolnych nie musi być uporządkowana ani nawet niepowtarzalna. Zatem,
a=(raz dwa trzy)
echo $a(3 3 3)
wydruki
trzy trzy trzy
If n odwołuje się do nieistniejącego elementu, a następnie $var(n) zwraca listę zerową. Notacja
$n, Gdzie n jest liczbą całkowitą, jest skrótem dla $*(n). A zatem, rcmożna przytoczyć argumenty
do 1 $, 2 $ i tak dalej.
Należy również pamiętać, że listę indeksów dolnych może podać dowolny z rcoperacje na liście:
$var(`{awk 'BEGIN{for(i=1;i<=10;i++)print i;exit; }'})
zwraca pierwsze 10 elementów $var.
Aby policzyć liczbę elementów w zmiennej, użyj
$#zmienna
Zwraca listę jednoelementową z liczbą elementów w $zmienna.
Mieszkanie wykazy
Aby utworzyć listę jednoelementową z listy wieloelementowej, wraz z komponentami
oddzielonych spacjami, użyj operatora daszka dolara ($^):
$^zm
Jest to przydatne, gdy trzeba ominąć normalne reguły łączenia list. Na przykład,
aby dodać pojedynczą kropkę na końcu ścieżki $, użyj:
echo $^ścieżka.
Cytat wsteczny Podstawienie
Listę można utworzyć na podstawie wyniku polecenia, stosując podstawienie cudzysłowu:
`{polecenie }
zwraca listę utworzoną na podstawie standardowego wyjścia polecenia w nawiasach klamrowych. $ifs jest przyzwyczajony
podziel wynik na elementy listy. Domyślnie $ifs ma wartość spacja-tab-nowa linia.
Nawiasy klamrowe można pominąć, jeżeli polecenie składa się z pojedynczego słowa. Dlatego zamiast tego można użyć `ls
z `{ls}. Ta ostatnia funkcja jest przydatna podczas definiowania funkcji, które stają się przydatne
listy argumentów. Częstym zastosowaniem jest:
fn src { echo *.[chy] }
następnie
wc`src
(Spowoduje to wydrukowanie liczby słów wszystkich plików źródłowych C w bieżącym katalogu.)
Aby zastąpić wartość $ifs dla pojedynczego podstawienia cytatu wstecznego, użyj:
`` (lista-ifs) { polecenie }
$ifs zostanie tymczasowo zignorowane, a dane wyjściowe polecenia zostaną podzielone zgodnie z ustawieniami
lista po podwójnym cudzysłowie. Na przykład:
`` ($nl :) {kat / Etc / passwd}
dzieli się / Etc / passwd na pola, zakładając, że $nl zawiera jako wartość znak nowej linii.
SPECIAL ZMIENNE
Znanych jest kilka zmiennych rc i są traktowane w szczególny sposób. Na poniższej liście
„domyślny” to oznacza rc nadaje zmiennej wartość domyślną przy uruchomieniu; „bez eksportu”
wskazuje, że zmienna nigdy nie jest eksportowana; i „tylko do odczytu” oznacza próbę
ustawienie zmiennej nie będzie miało żadnego efektu.
Ponadto „alias” oznacza, że zmienna ma alias o tej samej nazwie, pisanej wielkimi literami. Dla
na przykład przypisanie do $cdpath powoduje automatyczne przypisanie do $CDPATH i vice-
odwrotnie. Jeśli $CDPATH jest ustawione kiedy rc jest uruchomiony, jego wartość jest importowana do $cdpath. $ścieżka dysku
i $ścieżka są rc listy; $CDPATH i $PATH to listy oddzielone dwukropkami. Tylko nazwiska zapisane
w stolicach są eksportowane do środowiska.
* (bez eksportu)
Lista argumentów rc. $1, $2 itd. to to samo co $*(1), $*(2) itd.
0 (domyślnie brak eksportu)
Zmienna $0 przechowuje wartość argv[0], za pomocą której rc został powołany.
Dodatkowo $0 jest ustawione na nazwę funkcji na czas jej wykonania
tej funkcji, a $0 jest również ustawione na nazwę pliku, dla którego jest interpretowana
czas trwania A. Komenda. $0 nie jest elementem $* i nigdy nie jest traktowane jako
jeden.
apid (bez eksportu)
Identyfikator procesu ostatniego procesu uruchomionego w tle.
apids (bez eksportu, tylko do odczytu)
Lista, której elementami są identyfikatory procesów wszystkich procesów w tle, które są
jeszcze żyją lub które umarły i na które jeszcze nie czekano.
bqstatus (brak eksportu)
Status wyjścia rc rozwidlony, aby wykonać najnowsze podstawienie cudzysłowu.
Należy pamiętać, że w przeciwieństwie do $status, $bqstatus jest zawsze listą jednoelementową (patrz EXIT
STATUS poniżej). Na przykład:
echo foo |grep bar; jaki jest stan
wydruki
stan=(0 1)
natomiast
x=`{echo foo |grep bar}; jaki jest stan bq
wydruki
stan bq=1
ścieżka CD (alias)
Lista katalogów, w których należy przeszukać obiekt docelowy pliku cd Komenda. Pusty ciąg
oznacza bieżący katalog. Zauważ, że jeśli zmienna $cdpath nie
zawiera bieżący katalog, wówczas bieżący katalog nie będzie przeszukiwany;
pozwala to na rozpoczęcie wyszukiwania w katalogu innym niż bieżący
katalogiem.
historia
$history zawiera nazwę pliku, do którego dołączane są polecenia rc czyta
ich. Ułatwia to korzystanie z samodzielnego programu historii (np
historia(1)), który analizuje zawartość pliku historii i prezentuje ją rc
do reinterpretacji. Jeśli $history nie jest ustawiona, to rc nie dołącza poleceń do
dowolny plik.
dom (alias)
Domyślny katalog dla wbudowanego cd polecenie i katalog, w którym rc
szuka swojego pliku inicjującego, .rcrc, if rc został uruchomiony jako login
muszla.
jeśli (domyślnie)
Wewnętrzny separator pól używany do dzielenia wyniku cudzysłowu wstecznego
polecenia dotyczące trawienia w formie listy. Na starcie, rc przypisuje listę zawierającą
znaki spacja, tabulator i znak nowej linii na $ifs.
ścieżka (alias)
To jest lista katalogów, w których należy wyszukiwać polecenia. Pusty sznurek stoi
dla bieżącego katalogu. Jeśli w czasie uruchamiania nie ustawiono ani $PATH, ani $path,
$path przyjmuje wartość domyślną odpowiednią dla twojego systemu. To jest typowe
(/ usr / local / bin / usr / bin / usr / ucb /kosz .)
pid (domyślnie brak eksportu)
Podczas uruchamiania $pid jest inicjowany numerycznym identyfikatorem aktualnie uruchomionego procesu
rc.
monit (domyślnie)
Ta zmienna zawiera dwa monity (oczywiście w formie listy), które rc odciski.
$podpowiedź(1) jest wypisywane przed odczytaniem każdego polecenia, a $podpowiedź(2) jest drukowany, gdy
oczekuje się, że dane wejściowe będą kontynuowane w następnym wierszu. rc ustawia $prompt na ('; ' '') przez
domyślny. Powodem tego jest to, że umożliwia rc użytkownik, od którego ma pobierać polecenia
poprzednich linii za pomocą myszki i prezentowania ich rc do ponownej interpretacji; the
Podpowiedź ze średnikiem jest po prostu ignorowana rc. Wartość zerowa $podpowiedź(2) również ma swoje
uzasadnienie: o rc skrypt wpisany interaktywnie nie pozostawi $podpowiedź(2)
na ekranie, dzięki czemu można je chwycić myszą i umieścić bezpośrednio w pliku
plik do użycia jako skrypt powłoki, bez konieczności dalszej edycji.
zachęta (funkcja)
Jeśli ta funkcja jest zdefiniowana, to jest wykonywana za każdym razem rc ma zamiar wydrukować
$podpowiedź(1).
status (brak eksportu, tylko do odczytu)
Status wyjścia ostatniego polecenia. Jeśli polecenie zakończyło się z wartością numeryczną,
ta liczba to status. Jeśli polecenie zniknie wraz z sygnałem, status będzie następujący
nazwa tego sygnału; jeśli plik core został utworzony, dołączany jest ciąg „+core”.
Wartość $status dla potoku jest listą zawierającą jeden wpis, jak powyżej, dla każdego
proces w rurociągu. Na przykład polecenie
ls | toaleta
zwykle ustawia $status na (0 0).
wersja (domyślna)
Podczas uruchamiania pierwszy element tej zmiennej listy jest inicjowany jako ciąg znaków
który identyfikuje tę wersję rc. Drugi element jest inicjowany jako ciąg znaków
które można znaleźć przez identyfikacyjny(1) i co dowodzony przez scs(1).
FUNKCJE
rc funkcje są identyczne rc skrypty, z tą różnicą, że są one przechowywane w pamięci i są
automatycznie eksportowane do środowiska. Funkcja powłoki jest deklarowana jako:
nazwa fn { komendy }
rc skanuje definicję aż do nawiasu zamykającego, więc funkcja może obejmować więcej niż jeden
linia. Definicję funkcji można usunąć poprzez wpisanie
imię i nazwisko
(Można podać jedną lub więcej nazw. Wraz z towarzyszącą definicją wszystkie nazwy otrzymują
ta sama definicja. Jest to czasami przydatne do przypisania tej samej procedury obsługi sygnału
wiele sygnałów. Bez definicji wszystkie nazwane funkcje są usuwane.) Gdy funkcja jest
wykonane, $* jest ustawiane na argumenty tej funkcji na czas trwania polecenia.
Zatem rozsądna definicja l, skrót dla ls(1), może być:
fn l { ls -FC $* }
ale nie
fn l { ls -FC } # ŹLE
PRZERWANIA ROLNICZE SYGNAŁY
rc rozpoznaje wiele sygnałów i pozwala użytkownikowi zdefiniować działające funkcje powłoki
jako osoby obsługujące sygnały. rc domyślnie zatrzymuje SIGINT, gdy jest w trybie interaktywnym. SIGQUIT
i SIGTERM są ignorowane, chyba że rc został wywołany z opcją -d. Jednak użytkownik-
dla tych i wszystkich innych sygnałów można zapisać zdefiniowane procedury obsługi sygnałów. Sposób na zdefiniowanie
program obsługi sygnału ma napisać funkcję pod nazwą sygnału małymi literami. Zatem:
fn westchnienie { echo rozłącza się; rm /tmp/rc$pid.*; Wyjście }
Oprócz sygnałów Unix, rc rozpoznaje sztuczny sygnał SIGEXIT, który występuje jako
rc ma zamiar wyjść.
Aby usunąć definicję procedury obsługi sygnału, usuń ją tak, jakby była zwykłą
funkcjonować. Na przykład:
znak fn
zwraca procedurę obsługi SIGINT do wartości domyślnej. Aby zignorować sygnał należy ustawić opcję
wartość procedury obsługi sygnału na {}. Zatem:
znak fn {}
powoduje ignorowanie SIGINT przez powłokę. Przekazywane są tylko sygnały, które są ignorowane
do programów uruchamianych przez rc; funkcje sygnałowe nie są eksportowane.
W systemach Unix opartych na Systemie V rc nie pozwoli ci przechwycić SIGCLD.
WBUDOWANE POLECENIA
Wbudowane polecenia są wykonywane w kontekście powłoki, ale poza tym zachowują się dokładnie tak samo
inne polecenia. Chociaż !, ~ oraz @ nie są ściśle mówiąc poleceniami wbudowanymi, mogą
być zwykle używany jako taki.
. [-i] filet [arg ...]
odczytuje filet jako wejście do rc i wykonuje jego zawartość. Z flagą -i, wejście to
interaktywny. Zatem w skrypcie powłoki
. -i /dev/tty
robi „właściwą rzecz”.
złamać Odrywa się od najgłębszego wnętrza na lub póki, jak w C. Przywoływanie jest błędem złamać
poza pętlą. (Zauważ, że nie ma złamać słowo kluczowe między poleceniami w przełączniku
stwierdzenia, w przeciwieństwie do C.)
wbudowany komenda [arg ...]
Wykonuje polecenie, ignorując wszelkie definicje funkcji o tej samej nazwie. Ten
obecne jest polecenie umożliwiające funkcjom o takich samych nazwach jak funkcje wbudowane korzystanie z
podstawowy wbudowany lub binarny. Na przykład:
fn ls { wbudowany ls -FC $*}
to rozsądny sposób przekazania domyślnego zestawu argumentów do ls(1), podczas gdy
fn ls { ls -FC $* } # ŹLE
jest niekończącą się rekursją, która spowoduje wyczerpanie przestrzeni stosu rc i
(ostatecznie) zakończyć, jeśli jest wykonywany.
cd [katalog]
Zmienia bieżący katalog na katalog. Szukana jest zmienna $cdpath
możliwe lokalizacje katalog, analogicznie do wyszukiwania $path pliku wykonywalnego
akta. Bez argumentów, cd zmienia bieżący katalog na $home.
przegapić [-n] [--] [arg ...]
Wypisuje swoje argumenty na standardowe wyjście, zakończone znakiem nowej linii. Argumenty są
oddzielone spacjami. Jeśli pierwszym argumentem jest -n, końcowy znak nowego wiersza nie jest drukowany. Jeśli
pierwszym argumentem jest --, wtedy wszystkie inne argumenty są powtarzane dosłownie. To jest
używane do powtórzenia literału -n.
eval [podstęp]
Łączy elementy podstęp ze spacjami i przekazuje wynikowy ciąg do rc
do ponownego skanowania. Jest to jedyny moment, w którym dane wejściowe są ponownie skanowane rc.
exec [arg ...]
Zastępuje rc z podanym poleceniem. Jeśli plik exec zawiera tylko przekierowania, to
te przekierowania dotyczą bieżącej powłoki i powłoka nie kończy działania. Dla
przykład,
exec >[2] błąd.out
umieszcza dalsze dane wyjściowe w pliku ze standardowym błędem błąd.
wyjście [status]
Powoduje, że bieżąca powłoka zakończy działanie podanym wyjściem status. Jeśli nie ma argumentu
podana, używana jest bieżąca wartość $status.
ograniczenie [-h] [Zasób [wartość]]
Podobnego do csh(1) ograniczenie wbudowane, to polecenie działa w stylu BSD
limity zasobów procesu. Flaga -h wyświetla/zmienia twarde limity. The
zasoby, które można pokazać lub zmienić procesor, rozmiar pliku, rozmiar danych, wielkość stosu,
wielkość rdzenia, wykorzystanie pamięcioraz, jeśli jest to obsługiwane, deskryptory, wykorzystanie pamięci, pamięć,
maxproc, pamięć zablokowana, blokady plików. Na przykład:
ogranicz rozmiar pliku coredump 0
wyłącza zrzuty rdzenia. Aby ustawić miękki limit równy limitowi twardemu:
limit `{limit -h rozmiar danych}
nowypgr
Stawia rc do nowej grupy procesów. Ta funkcja jest przydatna do tworzenia rc zachowywać się jak
powłoka kontrolująca zadania we wrogim środowisku. Jednym z przykładów jest terminal NeXT
program, który domyślnie zakłada, że każda rozwidlana przez niego powłoka umieści się w pliku a
nowa grupa procesów.
powrót [n]
Zwraca z bieżącej funkcji ze statusem n, Gdzie n jest ważnym statusem wyjścia,
lub ich listę. Więc posiadanie jest legalne
powrót (pipe 1 2 3)
(Jest to powszechnie używane, aby umożliwić funkcji powrót ze statusem wyjścia a
wcześniej wykonany potok poleceń.) If n zostanie pominięty, to pozostawiony zostanie $status
niezmienione. Przywoływanie jest błędem powrót gdy nie jest wewnątrz funkcji.
przesunięcie [n]
Usuwa n elementy od początku $* i przesuwa pozostałe elementy w dół
n. n domyślnie 1.
umaska [maska]
Ustawia bieżący umask (patrz umaska(2)) do ósemki maska. Jeśli nie ma argumentu
obecna, drukowana jest bieżąca wartość maski.
czekać [Pid]
Oczekuje na proces z określonym Pid, który musiał zostać rozpoczęty przez rc, do
Wyjście. Jeśli nie Pid jest specyficzne, rc czeka na zakończenie wszystkich swoich procesów potomnych.
co jest [-b] [-f] [-p] [-s] [-v] [--] [Nazwa ...]
Drukuje definicję nazwanych obiektów. Dla wbudowanych, wbudowanych bla jest drukowany;
dla funkcji, w tym procedur obsługi sygnałów, drukowane są ich definicje; Do
pliki wykonywalne, drukowane są nazwy ścieżek; a w przypadku zmiennych ich wartości wynoszą
drukowane. Flagi ograniczają wyjście do wbudowanych, funkcji, programów wykonywalnych,
procedury obsługi sygnałów i odpowiednio zmienne. Jeśli nie Nazwas są określone, rc wykazy
wszystkie obiekty tego typu. (To nie jest dozwolone dla -p.) Bez argumentów,
whatis jest równoważne whatis -fv i wypisuje wartości wszystkich zmiennych powłoki
i funkcje.
Należy pamiętać, że co jest wyjście jest odpowiednie dla wejścia rc; zapisując dane wyjściowe co jest
w pliku powinno być możliwe odtworzenie stanu rc pozyskując ten plik
z . Komenda. Kolejna uwaga: plik whatis -s > nie może być używany do przechowywania pliku
stan rcobsługi sygnałów w pliku, ponieważ uruchamiane są wbudowane funkcje z przekierowaniami
w podpowłoce i rc zawsze przywraca procedury obsługi sygnałów do ich wartości domyślnych
widelec().
Ponieważ co jest zastosowania getopt(3) aby przeanalizować jego argumenty, możesz użyć specjalnego
argument - aby zakończyć swoje flagi. Dzięki temu możesz używać nazw rozpoczynających się od a
myślnik, np historia(1) polecenia. Na przykład,
co to jest ---str
PRZYKŁADY
przesunięcie wbudowany tylko przesuwa $*. Ta funkcja może przesuwać dowolną zmienną (z wyjątkiem $lshift).
fn lshift { lshift=$*; *=$1; przesuń $lzmiana(2); $lzmiana(1)=$* }
Mając tę definicję na miejscu,
mors = (buty statki woskowa kapusta królowie)
lshift mors 3
co to jest mors
wydruki
mors=(królowie kapusty)
Operator $^var spłaszcza listę, oddzielając każdy element spacją. Ta funkcja
pozwala, aby separatorem był dowolny ciąg znaków.
fn lpłaski {
lpłaskie=$*; *=$1
chwila () {
echo -n $1; zmiana
~ $#* 0 && przerwa
echo -n $lpłaskie(2)
}
Mając tę definicję na miejscu,
chmiel=(uunet mcvax ukc tlg)
chmiel!
drukuje (bez końcowego znaku nowej linii)
uunet!mcvax!ukc!tlg
EXIT STATUS
Status wyjścia rc jest zwykle taka sama jak ostatnia wykonana komenda. jeśli
ostatnią komendą był rurociąg, rc wychodzi 0, jeśli zrobiło to każde polecenie w potoku; inaczej to
wyjścia 1.
rc można zakończyć z określonym statusem za pomocą wyjście wbudowany.
GRAMATYKA
Oto rcgramatyka, edytowana w celu usunięcia działań semantycznych.
%termin ANDAND BACKBACK BANG LICZBA PRZYPADKÓW DUP ELSE END FLAT FN FOR IF IN
%termin OROR PIPE REDIR PRZEŁĄCZNIK PODPOWŁOCHY TWIDDLE PODCZAS SŁOWA HUH
%w lewo PODCZAS ')' ELSE
%w lewo ANDAND OROR „\n”
%lewa PODPOWŁOKA BANG
%lewa PIPE
%prawo „$”
% opuścił SUB
%start RC
%%
rc: koniec linii
| koniec błędu
koniec: END /* EOF */ | '\N'
cmdsa: cmd ';' | cmd „&”
linia: cmd | linia cmdsa
treść: cmd | ciało cmdsan
cmdsan: cmdsa | cmd '\n'
nawias klamrowy: '{' treść '}'
element nadrzędny: '(' ciało ')'
przypisz: pierwsze słowo „=”.
epilog: /* pusty */ | epilog redir
przekier.: DUP | Słowo REDIR
przypadek: słowa CASE ';' | PRZYPADKI słowa „\n”
ciało: cmd | obudowa obudowy | ciało cmdsan
iftail: cmd %prec ELSE
| nawias klamrowy ELSE optnl cmd
cmd : /* puste */ %prec WHILE
| prosty
| epilog nawiasowy
| JEŻELI paren optnl iftail
| FOR '(' słowo W słowach ')' optnl cmd
| DLA '(' słowo ')' optnl cmd
| WHILE paren optnl cmd
| PRZEŁĄCZ '(' słowo ')' optnl '{' cbody '}'
| TWIDDLE słowa optcaret
| cmd ANDAND opcnl cmd
| cmd LUB optnl cmd
| cmd PIPE optnl cmd
| redir cmd %prec BANG
| przypisz cmd %prec BANG
| BANG optcaret cmd
| PODPOWŁOKA optcaret cmd
| Nawiasy klamrowe FN
| słowa FN
optcaret: /* pusty */ | „^”
proste: pierwszy | proste słowo | proste przekierowanie
po pierwsze: comword | pierwszy miecz „^”.
miecz: komword | słowo kluczowe
słowo: miecz | słowo „^” miecz
słowo kluczowe: miecz „$”.
| '$' miecz SUB słowa ')'
| COUNT miecz
| PŁASKI miecz
| '''miecz
| ''' klamra
| WSTECZ nawias klamrowy | BACKBACK słowo miecz
| '(' słowa ')'
| Orteza REDIR
| SŁOWO
słowo kluczowe: DLA | W | PODCZAS | JEŻELI | PRZEŁĄCZNIK
| FN | INACZEJ | PRZYPADEK | TWIDDLE | BANG | PODPOWŁOKA
słowa: /* pusty */ | słowa słowo
optnl: /* pusty */ | optnl '\n'
Korzystaj z rc online, korzystając z usług onworks.net