Uwaga! To tłumaczenie może być
nieaktualne!
ksh to interpreter komend zaprojektowany zarówno do
interakcyjnej pracy z systemem, jak i do wykonywania skryptów. Jego
język komend jest nadzbiorem (superset) języka powłoki
sh(1).
Następujące opcje mogą być
użyte wyłącznie w linii komend:
- -c
łańcuch_komend
- powłoka wykonuje komendę(y) zawartą(e) w
łańcuchu_komend
- -i
- tryb interakcyjny — patrz poniżej
- -l
- powłoka zameldowania — patrz poniżej tryb
interakcyjny — patrz poniżej
- -s
- powłoka wczytuje komendy ze standardowego wejścia; wszelkie
argumenty nie będące opcjami są argumentami
pozycyjnymi
- -r
- tryb ograniczony — patrz poniżej
Ponadto wszelkie opcje, opisane w omówieniu wbudowanej
komendą set, mogą również zostać
użyte w linii poleceń.
Jeśli nie została podana ani opcja -c, ani
opcja -s, wówczas pierwszy argument nie będący
opcją, określa plik, z którego zostaną wczytane
komendy. Jeśli brak jest argumentów nie będących
opcjami, to powłoka wczytuje komendy ze standardowego wejścia.
Nazwa powłoki (tj. zawartość parametru $0) jest
ustalana jak następuje: jeśli użyto opcji -c i
podano argument nie będący opcją, to jest on
nazwą; jeśli komendy są wczytywane z pliku,
wówczas nazwa tego pliku zostaje użyta jako nazwa
powłoki; w każdym innym przypadku zostaje użyta nazwa,
pod którą powłoka została wywołana (tzn.
wartość argv[0]).
Powłoka jest interakcyjna, jeśli użyto
opcji -i lub jeśli zarówno standardowe wejście,
jak i standardowe wyjście błędów, jest
skojarzone z jakimś terminalem. W interakcyjnej powłoce
kontrola zadań (jeśli takowa jest dostępna w danym
systemie) jest włączona oraz ignorowane są
następujące sygnały: INT, QUIT oraz TERM. Ponadto
powłoka wyświetla zachętę przed odczytywaniem
poleceń (patrz parametry PS1 i PS2). Dla
nieinterakcyjnych powłok, uaktywnia się domyślnie opcja
trackall (patrz poniżej: komenda set).
Powłoka jest ograniczona, jeśli zastosowano
opcję -r lub gdy albo główna
część nazwy (basename), pod jaką wywołano
powłokę, albo parametr SHELL, pasują do wzorca
*r*sh (na przykład: rsh, rksh, rpdksh itp.). Po przetworzeniu przez
powłokę wszystkich plików profili i $ENV
włączane są następujące ograniczenia:
- •
- niedostępna jest komenda cd
- •
- nie mogą być zmieniane parametry: SHELL, ENV i
PATH.
- •
- nazwy poleceń nie mogą być podawane z użyciem
ścieżek bezwzględnych lub względnych
[tłum.: tj. dostępne są tylko przez nazwę bez
ścieżki]
- •
- niedostępna jest opcja -p wbudowanego polecenia
command
- •
- nie mogą być używane przekierowania tworzące
pliki (np.: >, >|, >>,
<>)
Powłoka jest uprzywilejowana, jeśli
zastosowano opcję -p lub jeśli rzeczywisty
identyfikator użytkownika lub jego grupy nie jest zgodny z efektywnym
identyfikatorem użytkownika czy grupy (patrz: getuid(2),
getgid(2)). Uprzywilejowana powłoka nie przetwarza ani
$HOME/.profile, ani parametru ENV (patrz poniżej),
przetwarza za to plik /etc/suid_profile. Wykasowanie opcji
uprzywilejowania powoduje, że powłoka ustawia swój
efektywny identyfikator użytkownika i grupy na wartości
faktycznego identyfikatora użytkownika (user-id) i jego grupy
(group-id).
Jeśli główna część
nazwy, pod jaką dana powłoka została wywołana
(tzn. argv[0]) zaczyna się od - lub użyto opcji
-l, to zakłada się, że powłoka ma
być powłoką zgłoszeniową i wczytywana
jest zawartość plików /etc/profile i
$HOME/.profile, jeśli takie istnieją i można je
odczytać.
Jeżeli parametr ENV jest ustawiony podczas
uruchamiania powłoki (albo w wypadku powłok
zgłoszeniowych - po przetworzeniu dowolnych plików
profilowych), to jego zawartość zostaje poddana
zastępowaniu. Zastępowane są parametry, komendy,
wyrażenia arytmetyczne oraz tylda. Następnie wynikająca
z tej operacji nazwa jest interpretowana jako nazwa pliku,
podlegającego wczytaniu i wykonaniu. Jeśli parametr ENV
jest pusty (i niezerowy), a pdksh został skompilowany ze
zdefiniowanym makrem DEFAULT_ENV, to po wykonaniu wszelkich
już wyżej wymienionych podstawień, zostaje wczytany
plik określony tym makrem.
Kod wyjścia powłoki wynosi 127, jeśli plik
komend podany we linii wywołania nie mógł zostać
otwarty, lub kod wyjścia jest niezerowy, jeśli
wystąpił krytyczny błąd składni podczas
wykonywania tego skryptu. W razie braku błędów
krytycznych, kod wyjścia jest równy kodowi ostatnio wykonanej
komendy lub zeru, jeśli nie wykonano żadnej komendy.
Powłoka rozpoczyna analizę składniową
wejścia od podziału go na poszczególne słowa
word. Słowa, stanowiące ciągi znaków,
ograniczane są niecytowanymi białymi znakami whitespace
(spacja, tabulator i nowa linia) lub metaznakami (<,
>, |, ;, &, ( i )). Poza
ograniczaniem słów spacje i tabulatory są ignorowane.
Natomiast znaki zmiany linii zwykle rozgraniczają komendy. Metaznaki
stosowane są do tworzenia następujących symboli:
<, <&, <<, >,
>&, >>, itd.,
służących do określania przekierowań
(patrz: "Przekierowywanie wejścia/wyjścia"
poniżej); | służy do tworzenia potoków;
|& służy do tworzenia koprocesów (patrz:
"Koprocesy" poniżej); ; służy do
oddzielania komend; & służy do tworzenia
potoków asynchronicznych; && i ||
służą do określenia wykonania warunkowego;
;; jest używany w poleceniach case; (( ..
)) są używane w wyrażeniach arytmetycznych; i w
końcu, ( .. ) służą do tworzenia
podpowłok.
Białe znaki lub metaznaki można zacytowywać
pojedynczo przy użyciu znaku odwrotnego ukośnika (\)
lub grupami w podwójnych (") lub pojedynczych (')
cudzysłowach. Zauważ, iż następujące
znaki podlegają również specjalnej interpretacji przez
powłokę i muszą być cytowane, jeśli
mają być użyte dosłownie: \,
", ', #, $, `, ~, {,
}, *, ? i [. Pierwsze trzy to wyżej
wspomniane symbole cytowania (patrz: "Cytowanie" poniżej);
#, na początku słowa rozpoczyna komentarz —
wszystko po znaku #, aż do końca linii jest ignorowane;
$ służy do wprowadzenia podstawienia parametru, komendy
lub wyrażenia arytmetycznego (patrz: "Podstawienia"
poniżej); ` rozpoczyna podstawienia komendy w starym stylu
(patrz: "Podstawienia" poniżej); ~ rozpoczyna
rozwinięcie katalogu (patrz: "Rozwijanie tyld"
poniżej); { i } obejmują alternacje w stylu
csh(1) (patrz: "Rozwijanie nawiasów"
poniżej); i na koniec, *, ? oraz [ są
stosowane przy tworzeniu nazw plików (patrz: "Wzorce nazw
plików" poniżej).
W trakcie analizy słów i symboli, powłoka
tworzy komendy, których wyróżnia się dwa
rodzaje: komendy proste, zwykle programy do wykonania, oraz
komendy złożone, takie jak dyrektywy for i
if, struktury grupujące i definicje funkcji.
Polecenie proste składa się z kombinacji
przyporządkowań wartości parametrom (patrz:
"Parametry"), przekierowań wejścia/wyjścia
(patrz: "Przekierowania wejścia/wyjścia") i
słów komend; Jedynym ograniczeniem jest to, że wszelkie
podstawienia wartości parametrów muszą
występować przed słowami komend. Słowa komend,
jeśli zostały podane, określają polecenie,
które należy wykonać, wraz z jego argumentami. Komenda
może być komendą wbudowaną powłoki,
funkcją lub komendą zewnętrzną,
tzn. oddzielnym plikiem wykonywalnym, który jest odnajdowany
przy użyciu wartości parametru PATH (patrz:
"Wykonywanie komend" poniżej). Trzeba
zauważyć, że wszystkie komendy mają swój
kod zakończenia: dla poleceń zewnętrznych jest
on powiązany z kodem zwracanym przez wait(2) (jeśli
komenda nie została odnaleziona, wówczas kod wynosi 127,
natomiast jeśli nie można było jej wykonać, to
kod wynosi 126). Kody zwracane przez inne polecenia (komendy wbudowane,
funkcje, potoki, listy, itp.) są precyzyjnie określone, a ich
opis towarzyszy opisowi danego konstruktu. Kod wyjścia komendy
zawierającej jedynie przyporządkowania wartości
parametrom, odpowiada kodowi ostatniego wykonanego podczas tego podstawienia
lub zeru, jeśli żadne podstawienia nie miały
miejsca.
Przy pomocy symbolu | komendy mogą zostać
powiązane w potoki. W potokach standardowe wyjście
wszystkich komend poza ostatnim, zostaje wyprowadzone (patrz pipe(2))
na standardowe wejście następnej komendy. Kod wyjścia
potoku jest równy kodowi zwróconemu przez ostatnią
komendę potoku. Potok może zostać poprzedzony
zarezerwowanym słowem !, powodującym zmianę kodu
wyjścia na jego logiczne przeciwieństwo. Tzn. jeśli
pierwotnie kod wyjścia wynosił 0, to będzie on
miał wartość 1, natomiast jeśli pierwotną
wartością nie było 0, to kodem przeciwstawnym jest
0.
Listę komend tworzymy rozdzielając potoki
jednym z następujących symboli: &&, ||,
&, |& i ;. Pierwsze dwa oznaczają
warunkowe wykonanie: cmd1 && cmd2 wykonuje
cmd2 tylko wtedy, jeżeli kod wyjścia cmd1
był zerowy. Natomiast || zachowuje się dokładnie
odwrotnie. — cmd2 zostaje wykonane jedynie, jeśli kod
wyjścia cmd1 był różny od zera.
&& i || wiążą
równoważnie, a zarazem mocniej niż &,
|& i ;, które z kolei również
posiadają tę samą siłę wiązania.
Symbol & powoduje, że poprzedzająca go komenda
zostanie wykonana asynchronicznie, tzn. powłoka uruchamia daną
komendę, jednak nie czeka na jej zakończenie (powłoka
śledzi dokładnie wszystkie asynchroniczne komendy —
patrz: "Kontrola zadań" poniżej). Jeśli
komenda asynchroniczna jest uruchomiona przy wyłączonej
kontroli zadań (tj. w większości skryptów),
wówczas jest ona uruchamiana z wyłączonymi
sygnałami INT i QUIT oraz przekierowanym wejściem do /dev/null
(aczkolwiek przekierowania, ustalone w samej komendzie asynchronicznej
mają tu pierwszeństwo). Operator |& rozpoczyna
koproces, stanowiący specjalnego rodzaju komendę
asynchroniczną (patrz: "Koprocesy" poniżej).
Zauważ, że po operatorach && i || musi
występować komenda, podczas gdy nie jest to konieczne po
&, |& i ;. Kodem wyjścia listy komend
jest kod ostatniego wykonanego w niej polecenia, z wyjątkiem list
asynchronicznych, dla których kod wynosi 0.
Komendy złożone tworzymy przy pomocy
następujących słów zarezerwowanych —
słowa te są rozpoznane tylko wtedy, gdy nie są
zacytowane i występują jako pierwsze wyrazy w komendzie (tj.
nie są poprzedzone żadnymi przyporządkowywaniami
wartości parametrom czy przekierowaniami):
| case |
else |
function |
then |
! |
| do |
esac |
if |
time |
[[ |
| done |
fi |
in |
until |
{ |
| elif |
for |
select |
while |
} |
Uwaga: Niektóre powłoki (lecz nie nasza) wykonują
polecenia sterujące w podpowłoce, gdy przekierowano jeden lub
więcej z ich deskryptorów plików, tak więc
wszelkiego rodzaju zmiany otoczenia w nich mogą nie
działać. Aby zachować przenośność
należy stosować polecenie exec do przekierowań
deskryptorów plików przed poleceniem sterującym.
W poniższym opisie poleceń złożonych,
listy komend (zaznaczone przez lista), po których
następuje słowo zarezerwowane, muszą
kończyć się średnikiem, przełamaniem
wiersza lub (poprawnym gramatycznie) słowem zarezerwowanym.
Przykładowo,
{ echo foo; echo bar; }
{ echo foo; echo bar<newline>}
{ { echo foo; echo bar; } }
są poprawne, natomiast
{ echo foo; echo bar }
nie.
- ( lista )
- Wykonaj listę w podpowłoce. Nie ma
bezpośredniej możliwości przekazania wartości
parametrów podpowłoki z powrotem do jej powłoki
macierzystej.
- { lista }
- Konstrukcja złożona; lista zostaje wykonana, lecz nie
w podpowłoce. Zauważ, że { i } to
zarezerwowane słowa, a nie metaznaki.
- case
słowo in [ [(] wzorzec [|
wzorzec] ... ) lista ;; ] ...
esac
- Wyrażenie case stara się dopasować
słowo do jednego z danych wzorców; wykonywana
jest lista powiązana z pierwszym poprawnie dopasowanym
wzorcem. Wzorce stosowane w wyrażeniach case
odpowiadają wzorcom stosowanym do specyfikacji nazw plików z
wyjątkiem tego, że nie obowiązują ograniczenia
związane z . i /. Proszę zwrócić
uwagę na to, że wszelkie niecytowane białe znaki
przed wzorcem i po nim zostają usunięte; wszelkie spacje we
wzorcu muszą być cytowane. Zarówno słowa, jak
i wzorce podlegają podstawieniom parametrów,
rozwinięciom arytmetycznym oraz podstawieniu tyldy. Ze
względów historycznych, możemy zastosować
nawiasy otwierający i zamykający zamiast in i
esac (w szczególności więc, case $foo { *)
echo bar; }). Kodem wyjścia wyrażenia case jest
kod wykonanej listy; jeśli nie została wykonana
żadna lista, wówczas kod wyjścia wynosi
zero.
- for nazwa [
in słowo ... zakończenie ] do
lista done
- gdzie zakończenie jest albo znakiem końca linii, albo
;. Dla każdego słowa w podanej liście
słów, parametr nazwa zostaje ustawiony na to
słowo i lista zostaje wykonana. Jeżeli nie
będzie użyte in do specyfikacji listy
słów, to zamiast tego zostaną użyte parametry
pozycyjne ("$1", "$2", itp.). Ze
względów historycznych, możemy zastosować
nawiasy otwierający i zamykający zamiast do i
done (w szczególności, for i; { echo $i;
}). Kodem wyjścia wyrażenia for jest ostatni kod
wyjścia danej listy; jeśli lista nie
została w ogóle wykonana, wówczas kod wynosi
zero.
- if lista then
lista [elif lista then lista] ...
[else lista] fi
- Jeśli kod wyjścia pierwszej listy jest zerowy, to
zostaje wykonana druga lista; w przeciwnym razie, jeśli mamy
takową, zostaje wykonana lista po elif, z podobnymi
konsekwencjami. Jeśli wszystkie listy po if i elif
wykażą błąd (tzn. zwrócą
niezerowy kod), to zostanie wykonana lista po else. Kodem
wyjścia wyrażenia if jest kod wykonanej listy,
niestanowiącej warunku. Jeśli żadna
nieokreślająca warunku lista nie zostanie wykonana,
wówczas kod wyjścia wynosi zero.
- select nazwa
[ in słowo ... zakończenie ] do
lista done
- gdzie zakończenie jest albo przełamaniem wiersza,
albo ;. Wyrażenie select umożliwia
automatyczną prezentację użytkownikowi menu, wraz z
możliwością wyboru z niego. Przeliczona lista
wykazanych słów zostaje wypisana na standardowym
wyjściu błędów, po czym zostaje
wyświetlony symbol zachęty (PS3, czyli
domyślnie `#? '). Następnie zostaje wczytana liczba
odpowiadająca danemu punktowi menu ze standardowego wejścia,
po czym nazwie zostaje przyporządkowane w ten sposób
wybrane słowo (lub wartość pusta, jeżeli
wybór był niewłaściwy), zmiennej REPLY
zostaje przyporządkowane to, co zostało wczytane (po
usunięciu początkowych i końcowych białych
znaków), i lista zostaje wykonana. Jeśli wprowadzono
pustą linię (dokładniej: zero lub więcej
znaczków IFS), wówczas menu zostaje ponownie
wyświetlone, bez wykonywania listy. Gdy wykonanie
listy zostaje zakończone, wówczas przeliczona lista
wyborów zostaje wyświetlona ponownie, jeśli
REPLY jest zerowe, ponownie wyświetlany jest symbol
zachęty i tak dalej. Proces ten się powtarza, aż do
wczytania znaku końca pliku, otrzymania sygnału przerwania
lub wykonania polecenia przerwania (break) w środku pętli.
Jeśli opuszczono in słowo ...,
wówczas użyte zostają parametry pozycyjne
(tzn., "$1", "$2", itp.).
Ze względów historycznych, możemy zastosować
nawiasy otwierający i zamykający zamiast do i
done (w szczególności, select i; { echo $i;
}). Kodem wyjścia wyrażenia select jest zero,
jeśli użyto polecenia przerwania do wyjścia z
pętli albo niezero w przeciwnym wypadku.
- until lista
do lista done
- Działa dokładnie jak while, z wyjątkiem tego,
że zawartość pętli jest wykonywana jedynie
wtedy, gdy kod wyjścia pierwszej listy jest niezerowy.
- while lista
do lista done
- Wyrażenie while określa pętlę o warunku
sprawdzanym przed wykonaniem. Zawartość pętli jest
wykonywana dopóki, dopóty kod wyjścia pierwszej
listy jest zerowy. Kodem wyjścia wyrażenia
while jest ostatni kod wyjścia listy w
zawartości tej pętli; gdy zawartość nie
zostanie w ogóle wykonana, wówczas kod wynosi zero.
- function
nazwa { lista }
- Definiuje funkcję o nazwie nazwa. Patrz: "Funkcje"
poniżej. Proszę zwrócić uwagę,
że przekierowania tuż po definicji funkcji zostają
zastosowane podczas wykonywania jej zawartości, a nie podczas
przetwarzania jej definicji.
- nazwa ()
polecenie
- Niemal dokładnie to samo co w function. Patrz:
"Funkcje" poniżej.
- (( wyrażenie ))
- Wartość wyrażenia arytmetycznego
wyrażenie zostaje przeliczona; równoważne do
let "wyrażenie". patrz:
"Wyrażenia arytmetyczne" i opis polecenia let
poniżej..
- [[ expression ]]
- Podobne do komend test i [ ... ] (które
opisujemy później), z następującymi
różnicami:
- •
- Rozdzielanie pól i generacja nazw plików nie są
wykonywane na argumentach.
- •
- Operatory -a (i) oraz -o (lub) zostają
zastąpione odpowiednio przez && i ||.
- •
- Operatory (dokładniej: -f, =, !,
itp.) nie mogą być cytowane.
- •
- Drugi operand dla != i = jest traktowany jako wzorzec (w
szczególności, porównanie
[[ foobar = f*r ]]
jest sukcesem).
- •
- Mamy do dyspozycji dwa dodatkowe operatory binarne: < i
>, które zwracają prawdę, gdy pierwszy
łańcuchowy operand jest odpowiednio mniejszy lub
większy od drugiego operandu łańcuchowego.
- •
- Jednoargumentowa postać operacji test, która
sprawdza, czy jedyny operand jest długości zerowej, jest
niedozwolona - operatory zawsze muszę być wykazywane jawnie,
w szczególności, zamiast
[ ciąg ]
należy użyć
[[ -n ciąg ]]
- •
- Podstawienia parametrów, komend i arytmetyczne zostają
wykonane w trakcie wyliczania wyrażenia. Do operatorów
&& i || stosowana jest metoda uproszczonego
określania ich wartości. To znaczy, że w
wyrażeniu
[[ -r foo && $(< foo) = b*r ]]
wartość $(< foo) zostaje wyliczona wtedy i tylko
wtedy, gdy plik o nazwie foo istnieje i jest czytelny.
Cytowanie stosuje się do zapobiegania traktowaniu przez
powłokę pewnych znaków czy słów w
specjalny sposób. Istnieją trzy metody cytowania: Po pierwsze,
\ cytuje następny znak, chyba że mieści
się on na końcu wiersza, wówczas zarówno
\ jak i znak nowej linii zostają usunięte. Po drugie
pojedynczy cudzysłów (') wycytowywuje wszystko,
aż po następny pojedynczy cudzysłów (wraz ze
zmianami linii włącznie). Po trzecie, podwójny
cudzysłów (") wycytowywuje wszystkie znaki, poza
$, ` i \, aż po następny niecytowany
podwójny cudzysłów. $ i ` wewnątrz
podwójnych cudzysłowów zachowują zwykłe
znaczenie (tzn. oznaczają podstawienie wartości parametru,
komendy lub wyrażenia arytmetycznego), jeśli tylko nie
zostanie wykonany jakikolwiek podział pól na wyniku
podwójnymi cudzysłowami wycytowanych podstawień.
Jeśli po \, wewnątrz ciągu znaków
cytowanego podwójnymi cudzysłowami następuje \,
$, ` lub ", to zostaje on zastąpiony drugim
z tych znaków. Jeśli po nim następuje znak nowej linii,
wówczas zarówno \, jak i znak zmiany linii
zostają usunięte; w przeciwnym razie zarówno znak
\, jak i następujący po nim znak nie podlegają
żadnej zamianie.
Uwaga: patrz "Tryb POSIX" poniżej pod
względem szczególnych reguł
obowiązujących sekwencje znaków postaci
"...`...\"...`..".
Istnieją dwa rodzaje aliasów: normalne aliasy komend
i aliasy śledzone. Aliasy komend stosowane są zwykle jako
skróty dla długich a często stosowanych komend.
Powłoka rozwija aliasy komend (tzn. podstawia pod nazwę
aliasu jego zawartość), gdy wczytuje pierwsze słowo
komendy. Rozwinięty alias zostaje ponownie przetworzony, aby
uwzględnić ewentualne występowanie dalszych
aliasów. Jeśli alias komendy kończy się
spacją lub tabulatorem, to wówczas następne
słowo zostaje również sprawdzone pod względem
rozwinięcia aliasów. Proces rozwijania aliasów
kończy się przy napotkaniu słowa, które nie jest
aliasem, gdy napotka się wycytowane słowo, lub gdy napotka
się alias, który jest właśnie eksportowany.
Następujące aliasy są definiowane
domyślnie przez powłokę:
autoload='typeset -fu'
functions='typeset -f'
hash='alias -t'
history='fc -l'
integer='typeset -i'
local='typeset'
login='exec login'
newgrp='exec newgrp'
nohup='nohup '
r='fc -e -'
stop='kill -STOP'
suspend='kill -STOP $$'
type='whence -v'
Śledzone aliasy pozwalają powłoce na
zapamiętanie, gdzie odnalazła ona konkretną
komendę. Gdy powłoka po raz pierwszy szuka w
ścieżce pocenia oznaczonego jako alias śledzony, to
zapamiętuje sobie pełną ścieżkę
tej komendy. Gdy powłoka następnie wykonuje daną
komendę po raz drugi, wówczas sprawdza, czy ta
ścieżka jest nadal aktualna i jeśli tak jest, to nie
przegląda już więcej pełnej
ścieżki w poszukiwaniu danej komendy. Śledzone aliasy
można wyświetlić lub stworzyć stosując
alias -t. Zauważ, że zmieniając
wartość parametru PATH czyścimy
również ścieżki dla wszelkich śledzonych
aliasów. Jeśli została włączona opcja
trackall (tzn., set -o trackall lub set -h),
wówczas powłoka śledzi wszelkie komendy. Ta opcja
zostaje włączona domyślnie dla wszelkich
nieinterakcyjnych powłok. Dla powłok interakcyjnych jedynie
następujące komendy są śledzone
domyślnie: cat, cc, chmod, cp,
date, ed, emacs, grep, ls, mail,
make, mv, pr, rm, sed, sh,
vi i who.
Pierwszym krokiem, jaki wykonuje powłoka podczas
wykonywania prostej komendy, jest przeprowadzenia podstawień na
słowach tej komendy. Istnieją trzy rodzaje podstawień:
parametrów, komend i arytmetyczne. Podstawienia parametrów,
które dokładniej opiszemy w następnej sekcji,
mają postać $name lub ${...};
podstawienia komend mają postać
$(command) lub `command`; a
podstawienia arytmetyczne: $((expression)).
Jeśli podstawienie występuje poza podwójnymi
cudzysłowami, wówczas wynik tego podstawienia podlega zwykle
podziałowi słów lub pól, w
zależności od bieżącej wartości parametru
IFS. Parametr IFS określa listę znaków,
służących jako separatory w podziale
łańcuchów znakowych na pojedyncze wyrazy. Wszelkie
znaki z tego zestawu oraz tabulator, spacja i nowa linia
włącznie, nazywane są białymi znakami
IFS. Ciągi jednego lub wielu białych znaków z IFS w
powiązaniu z zerem oraz jednym lub więcej białych
znaków nie wymienionych w IFS, rozgraniczają pola.
Wyjątkowo początkowe i końcowe białe znaki IFS
są usuwane (tzn. nie są przez nie tworzone żadne
początkowe czy końcowe puste pola); natomiast
początkowe lub końcowe białe znaki spoza IFS
tworzą puste pola. Przykładowo: jeśli IFS
zawiera `<spacja>:', to ciąg znaków
`<spacja>A<spacja>:<spacja><spacja>B::D' zawiera
cztery pola: `A', `B', `' i `D'. Proszę zauważyć,
że jeśli parametr IFS jest ustawiony na pusty
ciąg znaków, to wówczas żaden podział
pól nie ma miejsca; gdy parametr ten nie jest ustawiony w
ogóle, wówczas stosuje się domyślnie jako
rozgraniczniki spacji, tabulatora i nowej linii.
Jeśli nie podajemy inaczej, to wynik podstawienia podlega
również rozwijaniu nawiasów i nazw plików (patrz
odpowiednie akapity poniżej).
Podstawienie komendy zostaje zastąpione wyjściem,
wygenerowanym podczas wykonania danej komendy przez
podpowłokę. Dla podstawienia $(komenda)
zachodzą normalne reguły cytowania podczas analizy
komendy, choć jednak dla postaci
`komenda`, znak \ z jednym z $, `
lub \ tuż po nim, zostaje usunięty (znak \ z
następstwem jakiegokolwiek innego znaku zostaje niezmieniony). Jako
przypadek wyjątkowy podczas podstawiania komend, komenda postaci
< plik zostaje zinterpretowana, jako oznaczająca
podstawienie zawartości pliku plik ($(< foo) ma więc
ten sam efekt co $(cat foo), jest jednak bardziej efektywne albowiem nie
zostaje odpalony żaden dodatkowy proces).
UWAGA: Wyrażenia $(komenda) są analizowane
obecnie poprzez odnajdywanie zaległego nawiasu, niezależnie od
wycytowań. Miejmy nadzieję, że zostanie to
możliwie szybko poprawione.
Podstawienia arytmetyczne zostają zastąpione
wartością wyniku danego wyrażenia. Przykładowo
więc, komenda echo $((2+3*4)) wyświetla 14. Patrz:
"Wyrażenia arytmetyczne", aby odnaleźć opis
wyrażeń.
Parametry to zmienne w powłoce; można im
przyporządkowywać wartości oraz wyczytywać je
przez podstawienia parametrów. Nazwa parametru jest albo jednym ze
znaków interpunkcyjnych o specjalnym znaczeniu lub cyfrą,
jakie opisujemy poniżej, lub literą z następstwem
jednej lub więcej liter albo cyfr (`_' zalicza się to liter).
Podstawienia parametrów mają postać
$nazwa lub ${nazwa}, gdzie nazwa
jest nazwą danego parametru. Gdy podstawienie zostanie wykonane na
parametrze, który nie został ustalony, wówczas zerowy
ciąg znaków jest jego wynikiem, chyba że została
włączona opcja nounset (set -o nounset lub
set -u), co oznacza, że występuje wówczas
błąd.
Wartości można przyporządkowywać
parametrom na wiele różnych sposobów. Po pierwsze,
powłoka domyślnie ustala pewne parametry, takie jak #,
PWD, itp.; to jedyny sposób, w jaki są ustawiane
specjalnymi parametry o długości jednego znaku. Po drugie,
parametry zostają importowane z otocznia powłoki podczas jej
uruchamiania. Po trzecie, parametrom można przypisać
wartości w wierszu poleceń, tak jak np. `FOO=bar'
przypisuje parametrowi FOO wartość bar; wielokrotne
przypisania wartości są możliwe w jednym wierszu
komendy i może po nich występować prosta komenda, co
powoduje, że przypisania te są wówczas jedynie aktualne
podczas wykonywania danej komendy (tego rodzaju przypisania zostają
również wyeksportowane, patrz poniżej, co do tego
konsekwencji). Proszę zwrócić uwagę, iż
aby powłoka rozpoznała je jako przypisanie wartości
parametrowi, zarówno nazwa parametru jak i = nie mogą
być cytowane. Czwartym sposobem ustawiania parametrów jest
zastosowanie jednej z komend: export, readonly lub
typeset; patrz ich opisy w rozdziale "Wykonywanie komend".
Po czwarte, pętle for i select ustawiają
parametry, tak jak i również komendy getopts,
read i set -A. Na zakończenie, parametrom można
przyporządkowywać wartości stosując operatory
nadania wartości wewnątrz wyrażeń arytmetycznych
(patrz: "Wyrażenia arytmetyczne" poniżej) lub
stosując postać
${nazwa=wartość}
podstawienia parametru (patrz poniżej).
Parametry opatrzone atrybutem eksportowania (ustawianego przy
pomocy komendy export lub typeset -x albo przez
przyporządkowanie wartości parametru z
następującą prostą komendą)
zostają umieszczone w otoczeniu (patrz environ(5))
poleceń wykonywanych przez powłokę jako pary
nazwa=wartość. Kolejność, w
jakiej parametry występują w otoczeniu komendy jest
bliżej nieustalona. Podczas uruchamiania powłoka pozyskuje
parametry ze swojego otoczenia i automatycznie ustawia na tych parametrach
atrybut eksportowania.
Można stosować modyfikatory do postaci
${nazwa} podstawienia parametru:
- ${nazwa:-słowo}
- jeżeli parametrnazwa jest ustawiony i niezerowy,
wówczas zostaje podstawiona jego własna
wartość, w przeciwnym razie zostaje podstawione
słowo.
- ${nazwa:+słowo}
- jeśli parametr nazwa jest ustawiony i niezerowy,
wówczas zostaje podstawione słowo, inaczej nic nie
zostaje podstawione.
- ${nazwa:=słowo}
- jeśli parametr nazwa jest ustawiony i niezerowy,
wówczas zostaje podstawiony on sam, w przeciwnym razie zostaje mu
przyporządkowana wartość słowo i
wartość wynikająca ze słowa zostaje
podstawiona.
- ${nazwa:?słowo}
- jeżeli parametr nazwa jest ustawiony i niezerowy,
wówczas zostaje podstawiona jego własna
wartość, w przeciwnym razie słowo zostaje
wyświetlone na standardowym wyjściu
błędów (tuż po nazwa:) i zachodzi
błąd (powodujący normalnie zakończenie
całego skryptu powłoki, funkcji lub .-skryptu). Jeśli
słowo zostało pominięte, wówczas zamiast niego
zostaje użyty łańcuch `parameter null or not
set'.
W powyższych modyfikatorach możemy
ominąć :, czego skutkiem będzie, że
warunki będą jedynie wymagać, aby nazwa
był ustawiony lub nie (a nie żeby był ustawiony i
niezerowy). Jeśli potrzebna jest wartość
słowo, wówczas zostają na nim wykonane
podstawienia parametrów, komend, arytmetyczne i tyldy; natomiast,
jeśli słowo okaże się niepotrzebne,
wówczas jego wartość nie zostanie obliczana.
Można stosować, również podstawienia
parametrów o następującej postaci:
- ${#nazwa}
- Liczba parametrów pozycyjnych, jeśli nazwą
jest *, @ lub nie jest podana albo
długość ciągu będącego
wartością parametru nazwa.
- ${#nazwa[*]}, ${#nazwa[@]}
- Liczba elementów w tablicy nazwa.
- ${nazwa#wzorzec},
${nazwa##wzorzec}
- Gdy wzorzec nakłada się na początek
wartości parametru nazwa, wówczas pasujący
tekst zostaje pominięty w wynikającym z tego podstawieniu.
Pojedynczy # oznacza najkrótsze możliwe dopasowanie
do wzorca, a dwa # oznaczają jak najdłuższe
dopasowanie.
- ${nazwa%wzorzec},
${nazwa%%wzorzec}
- Podobnie jak w podstawieniu ${..#..}, tylko że
dotyczy końca wartości.
Następujące specjalne parametry zostają
ustawione domyślnie przez powłokę i nie można
przyporządkowywać jawnie wartości nadanych:
- !
- Id ostatniego uruchomionego w tle procesu. Jeśli nie ma aktualnie
procesów uruchomionych w tle, wówczas parametr ten jest
nieustawiony.
- #
- Liczba parametrów pozycyjnych (tzn., $1, $2,
itp.).
- $
- ID procesu odpowiadającego danej powłoce lub PID pierwotnej
powłoki, jeśli mamy do czynienia z
podpowłoką.
- -
- Konkatenacja bieżących opcji jednoliterowych (patrz komenda
set poniżej, aby poznać dostępne opcje).
- ?
- Kod wyjścia ostatniej wykonanej komendy nieasynchronicznej.
Jeśli ostatnia komenda została zabita sygnałem,
wówczas $? przyjmuje wartość 128 plus numer
danego sygnału.
- 0
- Nazwa, pod jaką dana powłoka została wywołana
(tzn., argv[0]), lub nazwa komendy, która
została wywołana przy użyciu opcji -c i
nazwa komendy została podana, lub argument plik,
jeśli taki został podany. Jeśli opcja posix
nie jest ustawiona, to $0 zawiera nazwę
bieżącej funkcji lub skryptu.
- 1 ... 9
- Pierwszych dziewięć parametrów pozycyjnych podanych
powłoce czy funkcji lub .-skryptowi. Dostęp do
dalszych parametrów pozycyjnych odbywa się przy pomocy
${liczba}.
- *
- Wszystkie parametry pozycyjne (z wyjątkiem parametru 0),
tzn., $1 $2 $3.... Gdy użyte poza podwójnymi
cudzysłowami, wówczas parametry zostają rozgraniczone
w pojedyncze słowa (podlegające rozgraniczaniu
słów); jeśli użyte pomiędzy
podwójnymi cudzysłowami, wówczas parametry
zostają rozgraniczone pierwszym znakiem podanym przez parametr
IFS (albo pustymi ciągami znaków, jeśli
IFS jest zerowy).
- @
- Tak jak $*, z wyjątkiem zastosowania w podwójnych
cudzysłowach, gdzie oddzielne słowo zostaje wygenerowane dla
każdego parametru pozycyjnego z osobna - jeśli brak
parametrów pozycyjnych, wówczas nie generowane jest
żadne słowo ("$@" może być
użyte aby otrzymać dostęp bezpośredni do
argumentów bez utraty argumentów zerowych lub rozgraniczania
ich przerwami).
Następujące parametry są ustawiane przez
powłokę:
- _ (podkreślenie)
- Gdy jakaś komenda zostaje wykonywana przez powłokę,
ten parametr przyjmuje w otoczeniu odpowiedniego nowego procesu
wartość ścieżki tej komendy. W interakcyjnym
trybie pracy, ten parametr przyjmuje w pierwotnej powłoce ponadto
wartość ostatniego słowa poprzedniej komendy Podczas
wartościowania wiadomości typu MAILPATH, parametr ten
zawiera więc nazwę pliku, który się
zmienił (patrz parametr MAILPATH poniżej).
- CDPATH
- Ścieżka przeszukiwania dla wbudowanej komendy cd.
Działa tak samo jak PATH dla katalogów
nierozpoczynających się od / w komendach cd.
Proszę zwrócić uwagę, że jeśli
CDPATH jest ustawiony i nie zawiera ani . ani ścieżki
pustej, to wówczas katalog bieżący nie jest
przeszukiwany.
- COLUMNS
- Liczba kolumn terminala lub okienka. Obecnie ustawiany
wartością cols zwracaną przez komendę
stty(1), jeśli ta wartość nie jest
równa zeru. Parametr ten ma znaczenie w interakcyjnym trybie edycji
wiersza komendy i dla komend select, set -o oraz kill
-l, w celu właściwego formatowania zwracanych
informacji.
- EDITOR
- Jeśli nie został ustawiony parametr VISUAL,
wówczas kontroluje on tryb edycji wiersza komendy w
powłokach interakcyjnych. Patrz parametr VISUAL
poniżej, aby się dowiedzieć, jak to
działa.
- ENV
- Jeśli parametr ten okaże się być ustawionym po
przetworzeniu wszelkich plików profilowych, wówczas jego
rozwinięta wartość zostaje wykorzystana jako nazwa
pliku zawierającego dalsze komendy inicjujące
powłoki. Zwykle zawiera definicje funkcji i aliasów.
- ERRNO
- Całkowita wartość odpowiadająca zmiennej errno
powłoki — wskazuje przyczynę wystąpienia
błędu, gdy ostatnie wywołanie systemowe nie
powiodło się.
Jak dotychczas niezaimplementowane.
- EXECSHELL
- Jeśli ustawiono, to wówczas zawiera powłokę,
jakiej należy użyć do wykonywania komend,
których nie zdołał wykonać execve(2), a
które nie zaczynają się od ciągu `#!
powłoka'.
- FCEDIT
- Edytor używany przez komendę fc (patrz
poniżej).
- FPATH
- Podobnie jak PATH, jeśli powłoka natrafi na
niezdefiniowaną funkcję podczas pracy, stosowane do
lokalizacji pliku zawierającego definicję tej funkcji.
Również przeszukiwane, gdy komenda nie została
odnaleziona przy użyciu PATH. Patrz "Funkcje"
poniżej co do dalszych informacji.
- HISTFILE
- Nazwa pliku używanego do zapisu historii komend. Jeśli
wartość została ustalona, wówczas historia
zostaje załadowana z danego pliku. Podobnie wielokrotne wcielenia
powłoki będą korzystały z jednej historii,
jeśli dla nich wartości parametru HISTFILE wskazuje
na jeden i ten sam plik.
UWAGA: jeśli HISTFILE nie zostało ustawione, wówczas
żaden plik historii nie zostaje użyty. W oryginalnej wersji
powłoki Korna natomiast, przyjmuje się domyślnie
$HOME/.sh_history; w przyszłości może pdksh,
będzie również stosował domyślny plik
historii.
- HISTSIZE
- Liczba komend zapamiętywana w historii, domyślnie 128.
- HOME
- Domyślna wartość dla komendy cd oraz
podstawiana pod niewycytowane ~ (patrz: "Rozwijanie
tyldy" poniżej).
- IFS
- Wewnętrzny separator pól, stosowany podczas
podstawień i wykonywania komendy read, do rozdzielania
wartości na oddzielne argumenty; domyślnie spacja, tabulator
i przełamanie wiersza. Szczegóły zostały
opisane w punkcie "Podstawienia" powyżej.
Uwaga: ten parametr nie jest importowany z otoczenia, podczas
uruchamiania powłoki.
- KSH_VERSION
- Wersja i data kompilacji powłoki (tylko do odczytu). Patrz
również na komendy wersji w "Interakcyjnej edycji
wiersza poleceń w trybie emacs" i "Edycji wiersza
poleceń vi" poniżej.
- LINENO
- Numer wiersza w funkcji lub aktualnie wykonywanym skrypcie.
- LINES
- Ilość wierszy terminala lub okienka pracy.
Jeszcze niezaimplementowane.
- MAIL
- Jeśli ustawiony, to użytkownik jest informowany o
nadejściu nowej poczty do wymienionego w tej opcji pliku
docelowego. Ten parametr jest ignorowany, jeśli został
ustawiony parametr MAILPATH.
- MAILCHECK
- Jak często powłoka ma sprawdzać, czy pojawiła
się nowa poczta w plikach podanych przez MAIL lub
MAILPATH. Jeśli 0, to powłoka sprawdza przed
każdą nową zachętą.
Wartością domyślną jest 600 (10 minut).
- MAILPATH
- Lista plików sprawdzanych w poszukiwaniu nowej poczty. Lista ta
rozdzielana jest dwukropkami, ponadto po nazwie każdego z
plików można podać ? i
wiadomość, która ma być wyświetlona,
jeśli nadeszła nowa poczta. Dla danej wiadomości
zostaną wykonane podstawienia komend, parametrów i
arytmetyczne. Podczas podstawień parametr $_ zawiera
nazwę tego pliku. Domyślnym zawiadomieniem o nowej poczcie
jest you have mail in $_ (masz pocztę w $_).
- OLDPWD
- Poprzedni katalog roboczy. Nieustalony, jeśli cd nie
zmieniło z powodzeniem katalogu od czasu uruchomienia
powłoki lub jeśli powłoka nie wie, gdzie się
aktualnie znajduje.
- OPTARG
- Podczas używania getopts zawiera argument dla aktualnie
rozpoznawanej opcji, jeśli jest on oczekiwany.
- OPTIND
- Indeks ostatniego przetworzonego argumentu podczas używania
getopts. Przyporządkowanie 1 temu parametrowi spowoduje,
że ponownie wywołane getopts przetworzy argumenty od
początku.
- PATH
- Lista rozdzielonych dwukropkiem katalogów, które są
przeszukiwane podczas odnajdywania jakiejś komendy lub
plików typu .. Pusty łańcuch wynikający
z początkowego lub końcowego dwukropka, albo dwóch
sąsiednich dwukropków jest traktowany jako `.', czyli
katalog bieżący.
- POSIXLY_CORRECT
- Ustawienie tego parametru powoduje włączenie opcji
posix. Patrz: "Tryb POSIX" poniżej.
- PPID
- Identyfikator ID procesu rodzicielskiego powłoki (tylko do
odczytu).
- PS1
- PS1 to podstawowy symbol zachęty dla powłok
interakcyjnych. Podlega podstawieniom parametrów, komend i
arytmetycznym, ponadto ! zostaje zastąpione kolejnym numerem
polecenia (patrz komenda fc poniżej). Sam znak ! może
zostać umieszczony w zachęcie używając !! w
PS1. Zauważ, że ponieważ edytory wiersza komendy
starają się obliczyć, jak długi jest symbol
zachęty (aby móc ustalić, ile miejsca pozostaje
wolnego do prawego brzegu ekranu), sekwencje wyjściowe w
zachęcie zwykle wprowadzają pewien bałagan. Istnieje
możliwość podpowiedzenia powłoce, żeby
nie uwzględniała pewnych ciągów znaków
(takich jak kody wyjścia) przez podanie przedrostka na
początku symbolu zachęty będącego
niewyświetlalnym znakiem (takim jak np. control-A) z
następstwem przełamania wiersza oraz odgraniczając
następnie kody wyjścia przy pomocy tego
niewyświetlalnego znaku. Gdy brak niewyświetlalnych
znaków, to nie ma żadnej rady... Nawiasem
mówiąc, nie ja jestem odpowiedzialny za ten hack. To
pochodzi z oryginalnego ksh. Domyślną
wartością jest `$ ' dla nieuprzywilejowanych
użytkowników, a `# ' dla roota..
- PS2
- Drugorzędna zachęta, o domyślnej wartości
`> ', która jest stosowana, gdy wymagane są dalsze
wprowadzenia w celu dokończenia komendy.
- PS3
- Zachęta stosowana przez wyrażenie select podczas
wczytywania wyboru z menu. Domyślnie `#? '.
- PS4
- Stosowany jako przedrostek komend, które zostają
wyświetlone podczas śledzenia toku pracy (patrz polecenie
set -x poniżej). Domyślnie `+ '.
- PWD
- Obecny katalog roboczy. Może być nieustawiony lub zerowy,
jeśli powłoka nie wie, gdzie się znajduje.
- RANDOM
- Prosty generator liczb pseudolosowych. Za każdym razem, gdy
odnosimy się do RANDOM, jego wartości zostaje
przyporządkowana następna liczba z przypadkowego
ciągu liczb. Miejsce w danym ciągu może zostać
ustawione nadając wartość RANDOM (patrz
rand(3)).
- REPLY
- Domyślny parametr komendy read, jeśli nie
pozostaną podane jej żadne nazwy. Stosowany
również w pętlach select do zapisu
wartości wczytywanej ze standardowego wejścia.
- SECONDS
- Liczba sekund, które upłynęły od czasu
uruchomienia powłoki lub jeśli parametrowi została
nadana wartość całkowita, liczba sekund od czasu
nadania tej wartości plus ta wartość.
- TMOUT
- Gdy ustawiony na pozytywną wartość
całkowitą, większą od zera, wówczas
ustala w interakcyjnej powłoce czas w sekundach, przez jaki
będzie ona czekała na wprowadzenie jakiegoś polecenia
po wyświetleniu podstawowego symbolu zachęty (PS1).
Po przekroczeniu tego czasu powłoka zakończy swoje
działanie.
- TMPDIR
- Katalog, w którym umieszczane są tymczasowe pliki
powłoki. Jeśli parametr ten nie jest ustawiony lub gdy nie
zawiera pełnej ścieżki do zapisywalnego katalogu,
wówczas domyślnie tymczasowe pliki mieszczą
się w /tmp.
- VISUAL
- Jeśli został ustawiony, ustala tryb edycji wiersza komend w
powłokach interakcyjnych. Jeśli ostatni element
ścieżki podanej w tym parametrze zawiera ciąg
znaków vi, emacs lub gmacs, to odpowiednio
zostaje uaktywniony tryb edycji: vi, emacs lub gmacs (Gosling emacs).
Rozwijanie znaków tyldy, które ma miejsce
równolegle do podstawień parametrów, zostaje wykonane
na słowach rozpoczynających się niecytowanym ~.
Znaki po tyldzie do pierwszego /, jeśli taki występuje,
są domyślnie traktowane jako nazwa użytkownika.
Jeśli nazwa użytkownika jest pusta lub ma
wartość + albo -, to zostaje podstawiona
wartość parametrów odpowiednioHOME, PWD
lub OLDPWD. W przeciwnym razie zostaje przeszukany plik haseł
(plik passwd) w celu odnalezienia danej nazwy użytkownika i w miejscu
wystąpienia tyldy zostaje podstawiony katalog domowy danego
użytkownika. Jeśli nazwa użytkownika nie zostanie
odnaleziona w pliku haseł lub gdy w nazwie użytkownika
występuje jakiekolwiek cytowanie albo podstawienie parametru,
wówczas nie zostaje wykonane żadne podstawienie.
W ustawieniach parametrów (tych poprzedzających
proste komendy lub tych występujących w argumentach dla
alias, export, readonly, i typeset), rozwijanie
znaków tyld zostaje wykonywane po jakimkolwiek niewycytowanym
(:) i nazwy użytkowników zostają ujęte w
dwukropki.
Katalogi domowe poprzednio rozwiniętych nazw
użytkowników zostają umieszczone w pamięci
podręcznej i przy ponownym użyciu zostają
stamtąd pobierane. Komenda alias -d może być
użyta do wylistowania, zmiany i dodania do tej pamięci
podręcznej (w szczególności, `alias -d
fac=/usr/local/facilities; cd ~fac/bin').
Rozwinięcia nawiasów przyjmujące
postać
prefiks{ciąg1,...,ciągN}sufiks
zostają rozwinięte w N wyrazów, z których
każdy zawiera konkatenację prefiks, ciągn i
sufiks (w szczególności., `a{c,b{X,Y},d}e' zostaje
rozwinięte do czterech wyrazów: ace, abXe, abYe i ade). Jak
już wyżej wspomniano, rozwinięcia nawiasów
mogą być nakładane na siebie, a wynikające
słowa nie są sortowane. Wyrażenia nawiasowe muszą
zawierać niecytowany przecinek (,), aby nastąpiło
rozwijanie (tak więc {} i {foo} nie zostają
rozwinięte). Rozwinięcie nawiasów następuje po
podstawieniach parametrów i przed generowaniem nazw plików.
Wzorcem nazwy pliku jest słowo zwierające jeden lub
więcej z niecytowanych symboli ? lub * lub sekwencji
[..]. Po wykonaniu rozwinięcia nawiasów,
powłoka zamienia wzorce nazw plików na uporządkowane
nazwy plików, które pasują do tego wzorca (jeśli
żadne pliki nie pasują, wówczas dane słowo
zostaje pozostawione bez zmian). Elementy wzorców mają
następujące znaczenia:
- ?
- oznacza dowolny pojedynczy znak.
- *
- oznacza dowolną sekwencję znaków.
- [..]
- oznacza każdy ze znaków pomiędzy klamrami.
Można podać zakresy znaków używając
- pomiędzy dwoma ograniczającymi zakres znakami, tzn.
[a0-9] oznacza literę a lub dowolną
cyfrę. Aby przedstawić sam znak - należy go
albo zacytować albo musi być to pierwszy lub ostatni znak w
liście znaków. Podobnie ] musi albo być
wycytowywane, albo być pierwszym lub ostatnim znakiem w
liście, jeśli ma oznaczać samego siebie, a nie
zakończenie listy. Również !
występujący na początku listy ma specjalne znaczenie
(patrz poniżej), tak więc aby reprezentował samego
siebie musi zostać wycytowany lub występować dalej w
liście.
- [!..]
- podobnie jak [..], tylko że oznacza dowolny znak
niewystępujący pomiędzy klamrami.
- *(wzorzec| ... |wzorzec)
- oznacza każdy ciąg zawierający zero lub więcej
wystąpień podanych wzorców. Przykładowo:
wzorzec *(foo|bar) obejmuje ciągi `', `foo', `bar',
`foobarfoo', itp..
- +(wzorzec| ... |wzorzec)
- obejmuje każdy ciąg znaków obejmujący jedno
lub więcej wystąpień danych wzorców.
Przykładowo: wzorzec +(foo|bar) obejmuje ciągi `foo',
`bar', `foobarfoo', itp..
- ?(wzorzec| ... |wzorzec)
- oznacza ciąg pusty lub ciąg obejmujący jeden z danych
wzorców. Przykładowo: wzorzec ?(foo|bar) obejmuje
jedynie ciągi `', `foo' i `bar'.
- @(wzorzec| ... |wzorzec)
- obejmuje ciąg obejmujący jeden z podanych wzorców.
Przykładowo: wzorzec @(foo|bar) obejmuje
wyłącznie ciągi `foo' i `bar'.
- !(wzorzec| ... |wzorzec)
- obejmuje dowolny ciąg nie obejmujący żadnego z danych
wzorców. Przykładowo: wzorzec !(foo|bar) obejmuje
wszystkie ciągi poza `foo' i `bar'; wzorzec !(*) nie
obejmuje żadnego ciągu; wzorzec !(?)* obejmuje
wszystkie ciągi (proszę się nad tym
zastanowić).
Proszę zauważyć, że wzorce w pdksh
obecnie nigdy nie obejmują . i .., w
przeciwieństwie do oryginalnej powłoki ksh, Bourne'a sh i
basha, tak więc to będzie musiało się
ewentualnie zmienić (na złe).
Proszę zauważyć, że powyższe
elementy wzorców nigdy nie obejmują kropki (.) na
początku nazwy pliku ani ukośnika (/), nawet gdy
zostały one podane jawnie w sekwencji [..]; ponadto
nazwy . i .. nigdy nie są obejmowane, nawet poprzez
wzorzec .*.
Jeśli została ustawiona opcja markdirs,
wówczas, wszelkie katalogi wynikające z generacji nazw
plików zostają oznaczone kończącym /.
POSIX-owe klasy znaków (tzn.,
[:nazwa_klasy:] wewnątrz wyrażenia typu
[..]) jak na razie nie zostały zaimplementowane.
Podczas wykonywania komendy, jej standardowe wejście,
standardowe wyjście i standardowe wyjście
błędów (odpowiednio deskryptory plików 0, 1 i 2)
są zwykle dziedziczone po powłoce. Trzema wyjątkami od
tej reguły są komendy w potokach, dla których
standardowe wejście i/lub standardowe wyjście
odpowiadają tym, ustalonym przez potok, komendy asychroniczne,
tworzone jeśli kontrola prac została wyłączona,
których standardowe wejście zostaje ustawione na
/dev/null, oraz komendy, dla których zostało ustawione
jedno lub kilka z następujących przekierowań:
- > plik
- Standardowe wyjście zostaje przekierowane do plik-u.
Jeśli plik nie istnieje, wówczas zostaje utworzony;
jeśli istnieje i jest to regularny plik oraz została
ustawiona opcja noclobber, wówczas występuje
błąd, w przeciwnym razie dany plik zostaje ucięty do
początku. Proszę zwrócić uwagę,
iż oznacza to, że komenda jakaś_komenda < foo
> foo otworzy plik foo do odczytu, a następnie
skasuje jego zawartość, gdy otworzy go do zapisu, zanim
jakaś_komenda otrzyma szansę przeczytania
czegokolwiek z foo.
- >| plik
- tak jak dla >, tylko że zawartość pliku
zostanie skasowana niezależnie od ustawienia opcji
noclobber.
- >> plik
- tak jak dla >, tylko że jeśli dany plik już
istnieje, to nowe dane będą dopisywane do niego, zamiast
kasowania poprzedniej jego zawartości. Ponadto plik ten zostaje
otwarty w trybie dopisywania, tak więc wszelkiego rodzaju operacje
zapisu na nim dotyczą jego aktualnego końca. (patrz
open(2)).
- < plik
- standardowe wejście zostaje przekierowane do pliku,
który jest otwierany w trybie do odczytu.
- <> plik
- tak jak dla <, tylko że plik zostaje otworzony w trybie
zapisu i czytania.
- << znacznik
- po wczytaniu wiersza komendy zawierającego tego rodzaju
przekierowanie (zwane tu-dokumentem), powłoka kopiuje wiersze z
komendy do tymczasowego pliku, aż do natrafienia na wiersz
odpowiadający znacznikowi. Podczas wykonywania polecenia
jego standardowe wejście jest przekierowane do pewnego pliku
tymczasowego. Jeśli znacznik nie zawiera wycytowanych
znaków, zawartość danego pliku tymczasowego zostaje
przetworzona tak, jakby zawierała się w podwójnych
cudzysłowach za każdym razem, gdy dana komenda jest
wykonywana. Tak więc zostaną na nim wykonane podstawienia
parametrów, komend i arytmetyczne wraz z interpretacją
odwrotnego ukośnika (\) i znaków wyjść
dla $, `, \ i \nowa_linia. Jeśli wiele
tu-dokumentów zostanie zastosowanych w jednym i tym samym wierszy
komendy, to są one zachowane w podanej kolejności.
- <<- znacznik
- tak jak dla <<, tylko że początkowe tabulatory
zostają usunięte z tu-dokumentu.
- <& fd
- standardowe wejście zostaje powielone z deskryptora pliku
fd. fd może być pojedynczą
cyfrą, wskazującą na numer istniejącego
deskryptora pliku, literą p, wskazującą na
plik powiązany w wyjściem obecnego koprocesu, lub znakiem
-, wskazującym, że standardowe wejście powinno
zostać zamknięte.
- >& fd
- tak jak dla <&, tylko że operacja dotyczy
standardowego wyjścia.
W każdym z powyższych przekierowań,
można podać jawnie deskryptor pliku, którego ma ono
dotyczyć, (tzn. standardowego wejścia lub standardowego
wyjścia) przez poprzedzającą odpowiednią
pojedynczą cyfrę. Podstawienia parametrów komend,
arytmetyczne, tyld, tak jak i (gdy powłoka jest interakcyjna)
generacje nazw plików - zostaną wykonane na argumentach
przekierowań plik, znacznik i fd. Trzeba jednak
zauważyć, że wyniki wszelkiego rodzaju generowania nazw
plików zostaną użyte tylko wtedy, gdy
określają nazwę jednego pliku; jeśli natomiast
obejmują one wiele plików, wówczas zostaje zastosowane
dane słowo bez rozwinięć wynikających z
generacji nazw plików. Proszę zwrócić
uwagę, że w powłokach ograniczonych, przekierowania
tworzące nowe pliki nie mogą być stosowane.
Dla prostych poleceń, przekierowania mogą
występować w dowolnym miejscu komendy, w komendach
złożonych (wyrażeniach if, itp.),
wszelkie przekierowania muszą znajdować się na
końcu. Przekierowania są przetwarzane po tworzeniu
potoków i w kolejności, w jakiej zostały podane, tak
więc
cat /foo/bar 2>&1 > /dev/null | cat
-n
wyświetli błąd z numerem linii wiersza
poprzedzającym go.
Całkowite wyrażenia arytmetyczne mogą
być stosowane przy pomocy komendy let, wewnątrz
wyrażeń $((..)), wewnątrz
odwołań do tablic (w szczególności,
nazwa[wyrażenie]), jako numeryczne
argumenty komendy test, i jako wartości w
przyporządkowywaniach do całkowitych parametrów.
Wyrażenia mogą zawierać alfanumeryczne
identyfikatory parametrów, odwołania do tablic i
całkowite stałe. Mogą zostać
również połączone następującymi
operatorami języka C: (wymienione i zgrupowane w kolejności
rosnącego priorytetu).
- Operatory
unarne:
- + - ! ~ ++ --
- Operatory
binarne:
- ,
= *= /= %= += -= <<= >>= &= ^= |=
||
&&
|
^
&
== !=
< <= >= >
<< >>
+ -
* / %
- Operator
trinarny:
- ?: (priorytet jest bezpośrednio wyższy od
przyporządkowania)
- Operatory
grupujące:
- ( )
Stałe całkowite mogą być podane w
dowolnej bazie, stosując notację
baza#liczba, gdzie baza jest
dziesiętną liczbą całkowitą
specyfikującą bazę, a liczba jest liczbą
zapisaną w danej bazie.
Operatory są wyliczane w następujący
sposób:
- unarny +
- wynikiem jest argument (podane wyłącznie dla
pełności opisu).
- unary -
- negacja.
- !
- logiczna negacja; wynikiem jest 1 jeśli argument jest zerowy, a 0
jeśli nie.
- ~
- arytmetyczna negacja (bit-w-bit).
- ++
- inkrement; musi być zastosowanym do parametru (a nie
literału lub innego wyrażenia) - parametr zostaje
powiększony o 1. Jeśli został zastosowany jako
operator przedrostkowy, wówczas wynikiem jest inkrementowana
wartość parametru, a jeśli został zastosowany
jako operator przyrostkowy, to wynikiem jest pierwotna
wartość parametru.
- --
- podobnie do ++, tylko że wynikiem jest zmniejszenie
parametru o 1.
- ,
- Rozdziela dwa wyrażenia arytmetyczne; lewa strona zostaje wyliczona
jako pierwsza, a następnie prawa strona. Wynikiem jest
wartość wyrażenia po prawej stronie.
- =
- przyporządkowanie; zmiennej po lewej zostaje nadana
wartość po prawej.
- *= /= %= += -= <<= >>= &= ^= |=
- operatory przyporządkowania; <var> <op>=
<expr> jest tym samym co <var> =
<var> <op> ( <expr> ).
- ||
- logiczna alternatywa; wynikiem jest 1 jeśli przynajmniej jeden z
argumentów jest niezerowy, 0 gdy nie. Argument po prawej zostaje
wyliczony jedynie, gdy argument po lewej jest zerowy.
- &&
- logiczna koniunkcja; wynikiem jest 1 jeśli obydwa argumenty
są niezerowe, 0 gdy nie. Prawy argument zostaje wyliczony jedynie,
gdy lewy jest niezerowy.
- |
- arytmetyczna alternatywa (bit-w-bit).
- ^
- arytmetyczne albo (bit-w-bit).
- &
- arytmetyczna koniunkcja (bit-w-bit).
- ==
- równość; wynikiem jest 1, jeśli obydwa
argumenty są sobie równe, 0 gdy nie.
- !=
- nierówność; wynikiem jest 0, jeśli obydwa
argumenty są sobie równe, 1 gdy nie.
- <
- mniejsze od; wynikiem jest 1, jeśli lewy argument jest mniejszy od
prawego, 0 gdy nie.
- <= >= >
- mniejsze lub równe, większe lub równe, większe
od. Patrz <.
- << >>
- przesuń w lewo (prawo); wynikiem jest lewy argument z bitami
przesuniętymi na lewo (prawo) o liczbę pól
podaną w prawym argumencie.
- + - * /
- suma, różnica, iloczyn i iloraz.
- %
- reszta; wynikiem jest reszta z dzielenia lewego argumentu przez prawy.
Znak wyniku jest nieustalony, jeśli któryś z
argumentów jest ujemny.
- <arg1> ? <arg2> :
<arg3>
- jeśli <arg1> jest niezerowy, to wynikiem jest
<arg2>, w przeciwnym razie <arg3>.
Koproces to potok stworzony poprzez operator |&,
który jest procesem asynchronicznym, do którego powłoka
może zarówno pisać (używając print
-p), jak i czytać (używając read -p).
Wejściem i wyjściem koprocesu można
również manipulować przy pomocy przekierowań
>&p i odpowiednio <&p. Po uruchomieniu
koprocesu, następne nie mogą być uruchomione
dopóki dany koproces nie zakończy pracy lub dopóki
wejście koprocesu nie zostanie przekierowane przez exec
n>&p. Jeśli wejście koprocesu
zostanie przekierowane w ten sposób, to następny w kolejce do
uruchomienia koproces będzie współdzielił
wyjście z pierwszym koprocesem, chyba że wyjście
pierwszego koprocesu zostało przekierowane przy pomocy exec
n<&p.
Pewne uwagi dotyczące koprocesów:
- •
- jedyną możliwością zamknięcia
wejścia koprocesu (tak aby koproces wczytał
zakończenie pliku) jest przekierowanie wejścia na numerowany
deskryptor pliku, a następnie zamknięcie tego deskryptora (w
szczególności, exec 3>&p;exec
3>&-).
- •
- aby koprocesy mogły współdzielić jedno
wyjście, powłoka musi zachować otwartą
część wpisową danego potoku
wyjściowego. Oznacza to, że zakończenie pliku nie
zostanie wykryte do czasu, aż wszystkie koprocesy
współdzielące wyjście zostaną
zakończone (gdy zostaną one zakończone,
wówczas powłoka zamyka swoją kopię potoku).
Można temu zapobiec przekierowując wyjście na
numerowany deskryptor pliku (ponieważ powoduje to
również zamknięcie przez powłokę swojej
kopii). Proszę zwrócić uwagę, iż to
zachowanie jest nieco odmienne od oryginalnej powłoki Korna,
która zamyka część zapisową swojej
kopii wyjścia koprocesu, gdy ostatnio uruchomiony koproces (zamiast
gdy wszystkie współdzielące koprocesy) zostanie
zakończony.
- •
- print -p ignoruje sygnał SIGPIPE podczas zapisu,
jeśli dany sygnał nie został przechwycony lub
zignorowany; nie zachodzi to jednak, gdy wejście koprocesu
zostało powielone na inny deskryptor pliku i stosowane jest
print -un.
Funkcje definiuje się albo przy pomocy syntaktyki
powłoki Korna function name, albo syntaktyki
powłoki Bourne'a/POSIX-owej: name() (patrz
poniżej, co do różnic zachodzących
pomiędzy tymi dwiema formami). Funkcje, tak jak i .-skrypty,
są wykonywane w bieżącym otoczeniu, aczkolwiek, w
przeciwieństwie do .-skryptów, argumenty powłoki
(tzn. argumenty pozycyjne, $1, itd.) nigdy nie
są widoczne wewnątrz nich. Podczas ustalania
położenia komendy, funkcje są przeszukiwane po
przeszukaniu specjalnych komend wbudowanych, zaś przed regularnymi
oraz nieregularnymi komendami wbudowanymi i przed przeszukaniem
PATH.
Istniejąca funkcja może zostać
usunięta poprzez unset -f nazwa-funkcji. Listę
funkcji można otrzymać poprzez typeset +f, a definicje
funkcji można otrzymać poprzez typeset -f.
autoload (co jest aliasem dla typeset -fu) może
zostać użyte do tworzenia niezdefiniowanych funkcji.
Jeśli ma być wykonana niezdefiniowana funkcja, wówczas
powłoka przeszukuje ścieżkę podaną w
parametrze FPATH szukając pliku o nazwie identycznej z
nazwą danej funkcji. Jeśli plik taki zostanie odnaleziony, to
będzie wczytany i wykonany. Jeśli po wykonaniu tego pliku dana
funkcja będzie zdefiniowana, wówczas zostanie ona wykonana, w
przeciwnym razie zostanie wykonane zwykłe odnajdywanie komend
(tzn., powłoka przeszukuje tablicę zwykłych
komend wbudowanych i PATH). Proszę zwrócić
uwagę, że jeśli komenda nie zostanie odnaleziona na
podstawie PATH, wówczas zostaje podjęta próba
odnalezienia funkcji przez FPATH (jest to nieudokumentowanym
zachowaniem się oryginalnej powłoki Korna).
Funkcje mogą mieć dwa atrybuty - śledzenia i
eksportowania, które mogą być ustawiane przez
typeset -ft i odpowiednio typeset -fx. Podczas wykonywania
funkcji śledzonej, opcja xtrace powłoki zostaje
włączona na czas danej funkcji, w przeciwnym razie opcja
xtrace pozostaje wyłączona. Atrybut eksportowania nie
jest obecnie używany. W oryginalnej powłoce Korna,
wyeksportowane funkcje są widoczne dla skryptów
powłoki, gdy są one wykonywane.
Ponieważ funkcje są wykonywane w obecnym
kontekście powłoki, przyporządkowania parametrów
wykonane wewnątrz funkcji pozostają widoczne po
zakończeniu danej funkcji. Jeśli jest to
niepożądane, wówczas komenda typeset może
być zastosowana wewnątrz funkcji do tworzenia lokalnych
parametrów. Proszę zwrócić uwagę,
iż w żaden sposób nie można ograniczyć
widoczności parametrów specjalnych (tzn. $$,
$!).
Kodem wyjścia funkcji jest kod wyjścia ostatniej
wykonanej w niej komendy. Funkcję można przerwać
bezpośrednio przy pomocy komendy return; można to
również zastosować do jawnego określenia kodu
wyjścia.
Funkcje zdefiniowane przy pomocy zarezerwowanego słowa
function, są traktowane odmiennie w
następujących punktach od funkcji zdefiniowanych poprzez
notację ():
- •
- parametr $0 zostaje ustawiony na nazwę funkcji (funkcje w
stylu Bourne'a nie dotykają $0).
- •
- przyporządkowania wartości parametrom poprzedzające
wywołanie funkcji nie zostają zachowane w
bieżącym kontekście powłoki (wykonywanie
funkcji w stylu Bourne'a zachowuje te przyporządkowania).
- •
- OPTIND zostanie zachowany i skasowany na początku oraz
następnie odtworzony na zakończenie funkcji, tak więc
getopts może być poprawnie stosowane zarówno
wewnątrz funkcji, jak i poza nimi (funkcje w stylu Bourne'a nie
dotykają OPTIND, tak więc stosowanie getopts
wewnątrz funkcji jest niezgodne ze stosowaniem getopts poza
funkcjami).
W przyszłości zostaną dodane również
następujące różnice:
- •
- Podczas wykonywania funkcji będzie stosowany oddzielny kontekst
śledzenia/sygnałów. Tak więc śledzenia
ustawione wewnątrz funkcji nie będą miały
wpływu na śledzenia i sygnały powłoki,
nieignorowane przez nią (które mogą być
przechwytywane), i będą miały domyślne ich
znaczenie wewnątrz funkcji.
- •
- Śledzenie EXIT-a, jeśli zostanie ustawione wewnątrz
funkcji, zostanie wykonane po zakończeniu funkcji.
Dana powłoka ma być w zasadzie zgodna ze standardem
POSIX, jednak, w niektórych przypadkach, zachowanie zgodne ze
standardem POSIX jest albo sprzeczne z zachowaniem oryginalnej
powłoki Korna, albo z wygodą użytkownika. To, jak
powłoka zachowuje się w takich wypadkach, jest ustalane stanem
opcji posix (set -o posix) — jeśli jest ona
włączona, to zachowuje się zgodnie z POSIX-em, a w
przeciwnym razie - nie. Opcja posix zostaje automatycznie ustawiona,
jeśli powłoka startuje w otoczeniu zawierającym
ustawiony parametr POSIXLY_CORRECT. (Powłokę
można również skompilować tak, aby zachowanie
zgodne z POSIX-em było domyślnie ustawione, ale jest to zwykle
niepożądane).
A oto lista wpływów ustawienia opcji
posix:
- •
- \" wewnątrz cytowanych podwójnymi
cudzysłowami `..` podstawień komend: w trybie
POSIX-owym, \" jest interpretowany podczas interpretacji
komendy; w trybie nie-POSIX-owym, odwrotny ukośnik zostaje
usunięty przed interpretacją podstawienia komendy. Na
przykładecho "`echo \"hi\"`" produkuje
`"hi"' w trybie POSIX-owym, `hi' a w trybie nie-POSIX-owym. W
celu uniknięcia problemów, proszę stosować
postać $(...) podstawienia komend.
- •
- wyjście kill -l: w trybie POSIX-owym nazwy
sygnałów są wymieniane wiersz po wierszu; w
nie-POSIX-owym trybie numery sygnałów, ich nazwy i opis
zostają wymienione w kolumnach. W przyszłości
zostanie dodana nowa opcja (zapewne -v) w celu
rozróżnienia tych dwóch zachowań.
- •
- kod wyjścia fg: w trybie POSIX-owym, kod wyjścia
wynosi 0, jeśli nie wystąpiły żadne
błędy; w trybie nie-POSIX-owym, kod wyjścia odpowiada
kodowi ostatniego zadania wykonywanego w pierwszym planie.
- •
- kod wyjścia poleceniaeval: jeżeli argumentem eval
będzie puste polecenie (np.: eval
"`false`"), to jego kodem wyjścia w trybie POSIX-owym
będzie 0. W trybie nie-POSIX-owym, kodem wyjścia
będzie kod wyjścia ostatniego podstawienia komendy,
które zostało dokonane podczas przetwarzania
argumentów polecenia eval (lub 0, jeśli nie było
podstawień komend).
- •
- getopts: w trybie POSIX-owym, opcje muszą zaczynać
się od -; w trybie nie-POSIX-owym, opcje mogą
się zaczynać albo od -, albo od +.
- •
- rozwijanie nawiasów (zwane również przemianą):
w trybie POSIX-owym rozwijanie nawiasów jest
wyłączone; w trybie nie-POSIX-owym rozwijanie
nawiasów jest włączone. Proszę
zauważyć, że set -o posix (lub ustawienie
parametru POSIXLY_CORRECT) automatycznie wyłącza
opcję braceexpand, może ona być jednak jawnie
włączona później.
- •
- set -: w trybie POSIX-owym, nie wyłącza to ani opcji
verbose, ani xtrace; w trybie nie-POSIX-owym,
wyłącza.
- •
- kod wyjścia set: w trybie POSIX-owym, kod wyjścia
wynosi 0, jeśli nie wystąpiły żadne
błędy; w trybie nie-POSIX-owym, kod wyjścia odpowiada
kodowi wszelkich podstawień komend wykonywanych podczas generacji
komendy set. Przykładowo, `set -- `false`; echo $?' wypisuje
0 w trybie POSIX-owym, a 1 w trybie nie-POSIX-owym. Taka konstrukcja
stosowana jest w większości skryptów powłoki
stosujących stary wariant komendy getopt(1).
- •
- rozwijanie argumentów komend alias, export,
readonly i typeset: w trybie POSIX-owym, następuje
normalne rozwijanie argumentów; w trybie nie-POSIX-owym,
rozdzielanie pól, dopasowywanie nazw plików, rozwijanie
nawiasów i (zwykłe) rozwijanie tyld są
wyłączone, ale rozwijanie tyld w przyporządkowaniach
pozostaje włączone.
- •
- specyfikacja sygnałów: w trybie POSIX-owym, sygnały
mogą być podawane jedynie cyframi, jeśli numery
sygnałów są zgodne z wartościami z POSIX-a
(tzn. HUP=1, INT=2, QUIT=3, ABRT=6, KILL=9, ALRM=14 i TERM=15); w
trybie nie-POSIX-owym, sygnały zawsze mogą być podane
cyframi.
- •
- rozwijanie aliasów: w trybie POSIX-owym, rozwijanie aliasów
zostaje jedynie wykonywane, podczas wczytywania słów komend;
w trybie nie-POSIX-owym, rozwijanie aliasów zostaje wykonane
również na każdym słowie po jakimś
aliasie, które kończy się białą
przerwą. Na przykład następująca pętla
for
alias a='for ' i='j'
a i in 1 2; do echo i=$i j=$j; done
używa parametru i w trybie POSIX-owym, natomiast
j w trybie nie-POSIX-owym.
- •
- test: w trybie POSIX-owym, wyrażenie "-t"
(poprzedzone pewną liczbą argumentów
"!") zawsze jest prawdziwe, gdyż jest
ciągiem o długości niezerowej; w nie-POSIX-owym
trybie, sprawdza czy deskryptor pliku 1 jest jakimś tty
(tzn., argument fd do testu -t może
zostać pominięty i jest domyślnie równy
1).
Po wyliczeniu argumentów wiersza komendy, wykonaniu
przekierowań i przyporządkowań parametrów,
zostaje ustalony typ komendy: specjalna wbudowana, funkcja, regularna
wbudowana lub nazwa pliku, który należy wykonać,
znajdowanego przy pomocy parametru PATH. Testy te zostają
wykonane w wyżej podanym porządku. Specjalne wbudowane komendy
różnią się tym od innych komend, że do
ich odnalezienia nie jest używany parametr PATH,
błąd podczas ich wykonywania może spowodować
zakończenie powłoki nieinterakcyjnej i
przyporządkowania wartości parametrów
poprzedzające komendę zostają zachowane po jej
wykonaniu. Aby tylko wprowadzić zamieszanie, jeśli opcja posix
została włączona (patrz komenda set
poniżej), to pewne specjale komendy stają się bardzo
specjalne, gdyż nie jest wykonywane rozdzielanie pól,
rozwijanie nazw plików, rozwijanie nawiasów, ani rozwijanie
tyld na argumentach, które wyglądają jak
przyporządkowania. Zwykłe wbudowane komendy
wyróżniają się jedynie tym, że do ich
odnalezienia nie jest stosowany parametr PATH.
Oryginalny ksh i POSIX różnią się
nieco w tym, jakie komendy są traktowane jako specjalne, a jakie jako
zwykłe:
- Specjalne polecenia
w POSIX
-
| . |
continue |
exit |
return |
trap |
| : |
eval |
export |
set |
unset |
| break |
exec |
readonly |
shift |
- Dodatkowe specjalne
komendy w ksh
-
- Bardzo specjalne komendy
(tryb nie-POSIX-owy)
-
| alias |
readonly |
set |
typeset |
- Regularne komendy w
POSIX
-
| alias |
command |
fg |
kill |
umask |
| bg |
false |
getopts |
read |
unalias |
| cd |
fc |
jobs |
true |
wait |
- Dodatkowe
regularne komendy ksh
-
| [ |
let |
pwd |
ulimit |
| echo |
print |
test |
whence |
W przyszłości dodatkowe specjalne komendy oraz
regularne komendy ksh mogą być traktowane odmiennie od
specjalnych i regularnych komand POSIX.
Po ustaleniu typu komendy, wszelkie przyporządkowania
wartości parametrów zostają wykonane i wyeksportowane
na czas trwania komendy.
Poniżej opisujemy specjalne i regularne polecenia
wbudowane:
- . plik [arg1 ...]
- Wykonaj komendy z pliku w bieżącym otoczeniu. Plik
zostaje odszukiwany przy użyciu katalogów z PATH.
Jeśli zostały podane argumenty, to parametry pozycyjne
mogą być używane w celu uzyskania dostępu do
nich podczas wykonywania pliku. Jeżeli nie zostały
podane żadne argumenty, to argumenty pozycyjne odpowiadają
tym z bieżącego otoczenia, w którym dana komenda
została użyta.
- : [ ... ]
- Komenda zerowa. Kodem wyjścia jest zero.
- alias [ -d |
+-t [-r] ] [+-px] [+-]
[name1[=value1] ...]
- Bez argumentów, alias wyświetla wszystkie obecne
aliasy. Dla każdej nazwy bez podanej wartości zostaje
wyświetlony istniejący odpowiedni alias. Każda nazwa
z podaną wartością definiuje alias (patrz:
"Aliasy" powyżej).
Do wyświetlania aliasów używany jest
jeden z dwóch formatów: zwykle aliasy są
wyświetlane jako
nazwa=wartość, przy czym
wartość jest cytowana; jeśli opcje
miały przedrostek + lub samo + zostało
podane we wierszu komendy, tylko nazwa zostaje
wyświetlona. Ponadto, jeśli została zastosowana
opcja -p, to dodatkowo każdy wiersz zaczyna się od
ciągu "alias ".
Opcja -x ustawia (a +x kasuje) atrybut eksportu
dla aliasu, lub jeśli nie podano żadnych nazw,
wyświetla aliasy wraz z ich atrybutem eksportu (eksportowanie
aliasu nie ma ma żadnego efektu).
Opcja -t wskazuje, że śledzone aliasy
mają być wyświetlone/ustawione (wartości
podane w wierszu komendy zostają zignorowane dla
śledzonych aliasów). Opcja -r wskazuje, że
wszystkie śledzone aliasy mają zostać
usunięte.
Opcja -d nakazuje wyświetlenie lub ustawienie
aliasów katalogów, które są stosowane w
rozwinięciach tyld (patrz: "Rozwinięcia tyld"
powyżej).
- bg [job
...]
- Podejmij ponownie wymienione zatrzymane zadanie(-a) w tle. Jeśli
nie podano żadnego zadania, to przyjmuje się
domyślnie %+. Ta komenda jest dostępna jedynie w
systemach obsługujących kontrolę zadań. Dalsze
informacje można znaleźć poniżej w rozdziale
"Kontrola zadań".
- bind [-m]
[klawisz[=komenda-edycji] ...]
- Ustawienie lub wyliczenie obecnych przyporządkowań
klawiszy/makr w emacsowym trybie edycji komend. Patrz "Interakcyjna
edycja wiersza poleceń w trybie emacs" w celu pełnego
opisu.
- break
[poziom]
- break przerywa poziom zagnieżdżenia w
pętlach for, select, until lub while. Domyślnie
poziom wynosi 1.
- builtin
komenda [arg1 ...]
- Wykonuje wbudowaną komendę komenda.
- cd [-LP]
[katalog]
- Ustawia aktualny katalog roboczy na katalog. Jeśli
został ustawiony parametr CDPATH, to wypisuje listę
katalogów, w których będzie szukać
katalogu. Pusta zawartość w CDPATH oznacza
katalog bieżący. Jeśli zostanie użyty niepusty
katalog z CDPATH, to na standardowym wyjściu będzie
wyświetlona jego pełna ścieżka. Jeśli
nie podano katalogu, to zostanie użyty katalog domowy
$HOME. Jeśli katalogiem jest -, to zostanie
zastosowany poprzedni katalog roboczy (patrz parametr OLDPWD).
Jeśli użyto opcji -L (ścieżka logiczna)
lub jeśli nie została ustawiona opcja physical (patrz
komenda set poniżej), wówczas odniesienia do
.. w katalogu są względne wobec
ścieżki zastosowanej do dojścia do danego katalogu.
Jeśli podano opcję -P (fizyczna
ścieżka) lub gdy została ustawiona opcja
physical, to .. jest względne wobec drzewa
katalogów systemu plików. Parametry PWD i
OLDPWD zostają uaktualnione tak, aby odpowiednio
zawierały bieżący i poprzedni katalog roboczy.
- cd [-LP]
stary nowy
- Ciąg nowy zostaje podstawiony w zamian za stary w
bieżącym katalogu i powłoka próbuje
przejść do nowego katalogu.
- command
[-pvV] komenda [arg1 ...]
- Jeśli nie została podana opcja -v ani opcja
-V, to komenda zostaje wykonana dokładnie tak, jakby
nie podano command, z dwoma wyjątkami: po pierwsze,
komenda nie może być funkcją w powłoce,
oraz po drugie, specjalne wbudowane komendy tracą swoją
specjalność (tzn. przekierowania i błędy w
użyciu nie powodują, że powłoka zostaje
zakończona, a przyporządkowania parametrów nie
zostają wykonane). Jeśli podano opcję -p,
zostaje zastosowana pewna domyślna ścieżka zamiast
obecnej wartości PATH (wartość domyślna
ścieżki jest zależna od systemu, w jakim pracujemy: w
systemach POSIX-owych jest to wartość zwracana przez
getconf CS_PATH
).
Jeśli podano opcję -v, to zamiast
wykonania polecenia komenda, zostaje podana informacja, co by
zostało wykonane (i to samo dotyczy również
arg1 ...): dla specjalnych i zwykłych wbudowanych komend i
funkcji, zostają po prostu wyświetlone ich nazwy, dla
aliasów, zostaje wyświetlona komenda definiująca
dany alias, oraz dla komend odnajdowanych przez przeszukiwanie
zawartości parametru PATH, zostaje wyświetlona
pełna ścieżka danej komendy. Jeśli komenda
nie zostanie odnaleziona, (tzn. przeszukiwanie ścieżki nie
powiedzie się), nic nie zostaje wyświetlone i
command zostaje zakończone z niezerowym kodem
wyjścia. Opcja -V jest podobna do opcji -v, tylko
że bardziej gadatliwa.
- continue
[poziom]
- continue skacze na początek poziomu z
najgłębiej zagnieżdżonej pętli for,
select, until lub while. level domyślnie 1.
- echo [-neE]
[arg ...]
- Wyświetla na standardowym wyjściu swoje argumenty
(rozdzielone spacjami), zakończone przełamaniem wiersza.
Przełamanie wiersza nie następuje, jeśli
którykolwiek z parametrów zawiera sekwencję
odwrotnego ukośnika \c. Patrz komenda print
poniżej, co do listy innych rozpoznawanych sekwencji odwrotnych
ukośników.
Następujące opcje zostały dodane dla
zachowania zgodności ze skryptami z systemów BSD:
-n wyłącza końcowe przełamanie
wiersza, -e włącza interpretację odwrotnych
ukośników (operacja zerowa, albowiem ma to
domyślnie miejsce) oraz -E
wyłączające interpretację odwrotnych
ukośników.
- eval komenda
...
- Argumenty zostają powiązane (z przerwami pomiędzy
nimi) do jednego ciągu, który następnie
powłoka rozpoznaje i wykonuje w obecnym otoczeniu.
- exec [komenda
[arg ...]]
- Komenda zostaje wykonana bez rozwidlania (fork), zastępując
proces powłoki.
Jeśli nie podano żadnych argumentów
wszelkie przekierowania wejścia/wyjścia są
dozwolone i powłoka nie zostaje zastąpiona. Wszelkie
deskryptory plików większe niż 2 otwarte lub
zdup(2)-owane w ten sposób nie są dostępne
dla innych wykonywanych komend (tzn., komend nie wbudowanych w
powłokę). Zauważ, że powłoka Bourne'a
różni się w tym: przekazuje bowiem deskryptory
plików.
- exit
[kod]
- Powłoka zostaje zakończona z podanym kodem wyjścia.
Jeśli kod nie został podany, wówczas kod
wyjścia przyjmuje bieżącą
wartość parametru ?.
- export [-p]
[parametr[=wartość]] ...
- Ustawia atrybut eksportu danego parametru. Eksportowane parametry
zostają przekazywane w otoczeniu do wykonywanych komend.
Jeśli podano wartości, to zostają one
również przyporządkowane danym parametrom.
Jeśli nie podano żadnych parametrów,
wówczas nazwy wszystkich parametrów z atrybutem eksportu
zostają wyświetlone wiersz po wierszu, chyba że
użyto opcji -p, wtedy zostają wyświetlone
komendy export definiujące wszystkie eksportowane
parametry wraz z ich wartościami.
- false
- Komenda kończąca się z niezerowym kodem powrotu.
- fc [-e edytor
| -l [-n]] [-r] [pierwszy
[ostatni]]
- pierwszy i ostatni wybierają komendy z historii.
Komendy możemy wybierać przy pomocy ich numeru w historii
lub podając ciąg znaków określający
ostatnio użytą komendę rozpoczynającą
się od tegoż ciągu. Opcja -l wyświetla
daną komendę na stdout, a -n wyłącza
domyślne numery komend. Opcja -r odwraca
kolejność komend w liście historii. Bez -l,
wybrane komendy podlegają edycji przez edytor podany poprzez
opcję -e, albo jeśli nie podano -e, przez
edytor podany w parametrze FCEDIT (jeśli nie został
ustawiony ten parametr, wówczas stosuje się /bin/ed),
i następnie wykonana przez powłokę.
- fc [-e - |
-s] [-g] [stare=nowe]
[prefiks]
- Wykonuje ponownie wybraną komendę (domyślnie
poprzednią komendę) po wykonaniu opcjonalnej zamiany
stare na nowe. Jeśli podano -g, wówczas
wszelkie wystąpienia stare zostają zastąpione
przez nowe. Z tej komendy korzysta się zwykle przy pomocy
zdefiniowanego domyślnie aliasu r='fc -e -'.
- fg [zadanie
...]
- Przywraca na pierwszy plan zadanie(-nia). Jeśli nie podano jawnie
żadnego zadania, wówczas odnosi się to
domyślnie do %+. Ta komenda jest jedynie dostępna na
systemach wspomagających kontrolę zadań. Patrz
"Kontrola zadań" dla dalszych informacji.
- getopts
ciągopt nazwa [arg ...]
- getopts jest stosowany przez procedury powłoki do
rozpoznawania podanych argumentów (lub parametrów
pozycyjnych, jeśli nie podano żadnych argumentów) i
do sprawdzenia zasadności opcji. ciągopt zawiera
litery opcji, które getopts ma rozpoznawać.
Jeśli po literze występuje przecinek, wówczas
oczekuje się, że opcja ma argument. Opcje niemające
argumentów mogą być grupowane w jeden argument.
Jeśli opcja oczekuje argumentu i znak opcji nie jest ostatnim
znakiem argumentu, w którym się znajduje, wówczas
reszta argumentu zostaje potraktowana jako argument danej opcji. W
przeciwnym razie następny argument jest argumentem opcji.
Za każdym razem, gdy zostaje wywołane
getopts, umieszcza się następną opcję
w parametrze powłoki nazwa i indeks następnego
argumentu pod obróbkę w parametrze powłoki
OPTIND. Jeśli opcja została podana z +, to
opcja zostaje umieszczana w nazwa z przedrostkiem +.
Jeśli opcja wymaga argumentu, to getopts umieszcza go w
parametrze powłoki OPTARG. Jeśli natrafi się
na niedopuszczalną opcję lub brakuje argumentu opcji,
wówczas w nazwa zostaje umieszczony znak zapytania albo
dwukropek (wskazując na nielegalną opcję, albo
odpowiednio brak argumentu) i OPTARG zostaje ustawiony na znak,
który był przyczyną tego problemu. Ponadto zostaje
wówczas wyświetlony komunikat o błędzie na
standardowym wyjściu błędów, jeśli
ciągopt nie zaczyna się od dwukropka.
Gdy napotkamy na koniec opcji, getopts przerywa
pracę niezerowym kodem wyjścia. Opcje kończą
się na pierwszym (nie podlegającym opcji) argumencie,
który nie rozpoczyna się od -, albo jeśli natrafimy
na argument --.
Rozpoznawanie opcji może zostać ponowione
ustawiając OPTIND na 1 (co następuje automatycznie
za każdym razem, gdy powłoka lub funkcja w powłoce
zostaje wywołana).
Ostrzeżenie: Zmiana wartości parametru
powłoki OPTIND na wartość
większą niż 1, lub rozpoznawanie odmiennych
zestawów parametrów bez ponowienia OPTIND
może doprowadzić do nieoczekiwanych wyników.
- hash [-r]
[nazwa ...]
- Jeśli brak argumentów, wówczas wszystkie
ścieżki wykonywalnych komend z kluczem są wymieniane.
Opcja -r nakazuje wyrzucenia wszelkim komend z kluczem z tablicy
kluczy. Każda nazwa zostaje odszukiwana tak, jak by to
była nazwa komendy i dodana do tablicy kluczy jeśli jest to
wykonywalna komenda.
- jobs [-lpn]
[zadanie ...]
- Wyświetl informacje o danych zadaniach; gdy nie podano
żadnych zadań wszystkie zadania zostają
wyświetlone. Jeśli podano opcję -n,
wówczas informacje zostają wyświetlone jedynie o
zadaniach, których stan zmienił się od czasu
ostatniego powiadomienia. Zastosowanie opcji -l powoduje dodatkowo
wykazanie identyfikatora każdego procesu w zadaniach. Opcja
-p powoduje, że zostaje wyświetlona jedynie jedynie
grupa procesowa każdego zadania. patrz "Kontrola
zadań" dla informacji o formie parametru zdanie i
formacie, w którym zostają wykazywane zadania.
- kill [-s
nazsyg | -numsyg | -nazsyg ] { job | pid
| -pgrp } ...
- Wyślij dany sygnał do danych zadań, procesów z
danym id, lub grup procesów. Jeśli nie podano jawnie
żadnego sygnału, wówczas domyślnie zostaje
wysłany sygnał TERM. Jeśli podano zadanie,
wówczas sygnał zostaje wysłany do grupy
procesów danego zadania. Patrz poniżej "Kontrola
zadań" dla informacji o formacie zadania.
- kill -l
[kod_wyjścia ...]
- Wypisz nazwę sygnału, który zabił procesy,
które zakończyły się danym
kodem_wyjścia. Jeśli brak argumentów,
wówczas zostaje wyświetlona lista wszelkich
sygnałów i ich numerów, wraz z krótkim ich
opisem.
- let
[wyrażenie ...]
- Każde wyrażenie zostaje wyliczone, patrz
"Wyrażenia arytmetyczne" powyżej. Jeśli
wszelkie wyrażenia zostały poprawnie wyliczone, kodem
wyjścia jest 0 (1), jeśli wartością ostatniego
wyrażenia
nie było zero (zero). Jeśli wystąpi błąd
podczas rozpoznawania lub wyliczania wyrażenia, kod wyjścia
jest większy od 1. Ponieważ może zajść
konieczność wycytowania wyrażeń, więc
(( wyr. )) jest syntaktycznie słodszym
wariantem let "wyr".
- print
[-nprsun | -R [-en]] [argument
...]
- Print wyświetla swe argumenty na standardowym
wyjściu, rozdzielone przerwami i zakończone
przełamaniem wiersza. Opcja -n zapobiega domyślnemu
przełamaniu wiersza. Domyślnie pewne wyprowadzenia z C
zostają odpowiednio przetłumaczone. Wśród nich
mamy \b, \f, \n, \r, \t, \v, i \0### (# oznacza cyfrę w systemie
ósemkowym, tzn. od 0 po 3). \c jest równoważne z
zastosowaniem opcji -n. \ wyrażeniom można zapobiec
przy pomocy opcji -r. Opcja -s powoduje wypis do pliku
historii zamiast standardowego wyjścia, a opcja -u powoduje
wypis do deskryptora pliku n (n wynosi domyślnie 1
przy pominięciu), natomiast opcja -p pisze do do koprocesu
(patrz "Koprocesy" powyżej).
Opcja -R jest stosowana do emulacji, w pewnym stopniu,
komendy echo w wydaniu BSD, która nie przetwarza sekwencji \ bez
podania opcji -e. Jak powyżej opcja -n zapobiega
końcowemu przełamaniu wiersza.
- pwd [-LP]
- Wypisz bieżący katalog roboczy. Przy zastosowaniu opcji
-L lub gdy nie została ustawiona opcja physical
(patrz komenda set poniżej), zostaje wyświetlona
ścieżka logiczna (tzn. ścieżka konieczna aby
wykonać cd do bieżącego katalogu). Przy
zastosowaniu opcji -P (ścieżka fizyczna) lub gdy
została ustawiona opcja physical, zostaje wyświetlona
ścieżka ustalona przez system plików
(śledząc katalogi .. aż po katalog
główny).
- read
[-prsun] [parametr ...]
- Wczytuje wiersz wprowadzenia ze standardowego wejścia, rozdziela
ten wiersz na pola przy uwzględnieniu parametru IFS ( patrz
"Podstawienia" powyżej) i przyporządkowuje pola
odpowiednio danym parametrom. Jeśli mamy więcej
parametrów niż pól, wówczas dodatkowe
parametry zostają ustawione na zero, a natomiast jeśli jest
więcej pól niż paramterów to ostatni parametr
otrzymuje jako wartość wszystkie dodatkowe pola (wraz ze
wszelkimi rozdzielającymi przerwami). Jeśli nie podano
żadnych parametrów, wówczas zostaje zastosowany
parametr REPLY. Jeśli wiersz wprowadzania kończy
się odwrotnym ukośnikiem i nie podano opcji -r, to
odwrotny ukośnik i przełamanie wiersza zostają
usunięte i zostaje wczytana dalsza część
danych. Gdy nie zostanie wczytane żadne wprowadzenie, read
kończy się niezerowym kodem wyjścia.
Pierwszy parametr może mieć
dołączony znak zapytania i ciąg, co oznacza,
że dany ciąg zostanie zastosowany jako zachęta do
wprowadzenia (wyświetlana na standardowym wyjściu
błędów zanim zostanie wczytane jakiekolwiek
wprowadzenie) jeśli wejście jest terminalem (e.g.,
read ncoś?'ile cośków: ').
Opcje -un i -ppowodują, że
wprowadzenia zostanie wczytywane z deskryptora pliku n albo
odpowiednio bieżącego koprocesu (patrz komentarze na ten
temat w "Koprocesy" powyżej). Jeśli zastosowano
opcję -s, wówczas wprowadzenie zostaje zachowane w
pliku historii.
- readonly
[-p] [parametr[=wartość]]
...
- Patrz parametr wyłącznego odczytu nazwanych
parametrów. Jeśli zostały podane wartości
wówczas zostają one nadane parametrom przed ustawieniem
danego atrybutu. Po nadaniu cechy wyłącznego odczytu
parametrowi, nie ma więcej możliwości wykasowania go
lub zmiany jego wartości.
Jeśli nie podano żadnych parametrów,
wówczas zostają wypisane nazwy wszystkich
parametrów w cechą wyłącznego odczytu wiersz
po wierszu, chyba że zastosowano opcję -p, co
powoduje wypisanie pełnych komend readonly
definiujących parametry wyłącznego odczytu wraz z
ich wartościami.
- return
[kod]
- Powrót z funkcji lub . skryptu, z kodem wyjścia
kod. Jeśli nie podano wartości kod,
wówczas zostaje domyślnie zastosowany kod wyjścia
ostatnio wykonanej komendy. Przy zastosowaniu poza funkcją lub
. skryptem, komenda ta ma ten sam efekt co exit.
Proszę zwrócić uwagę, iż pdksh traktuje
zarówno profile jak i pliki z $ENV jako . skrypty,
podczas gdy oryginalny Korn shell jedynie profile traktuje jako .
skrypty.
- set
[+-abCefhkmnpsuvxX] [+-o [opcja]] [+-A
nazwa] [--] [arg ...]
- Komenda set służy do ustawiania (-) albo kasowania
(+) opcji powłoki, ustawiania parametrów pozycyjnych
lub ustawiania parametru ciągowego. Opcje mogą być
zmienione przy pomocy syntaktyki +-o opcja, gdzie
opcja jest pełną nazwą pewnej opcji lub
stosując postać +-litera, gdzie litera
oznacza jednoliterową nazwę danej opcji (niewszystkie opcje
posiadają jednoliterową nazwę).
Następująca tablica wylicza zarówno litery opcji (gdy
mamy takowe), jak i pełne ich nazwy wraz z opisem
wpływów danej opcji.
| -A |
|
Ustawia elementy parametru ciągowego nazwa na
arg ...; Jeśli zastosowano -A, ciąg
zostaje uprzednio ponowiony (tzn., wyczyszczony); Jeśli
zastosowano +A, zastają ustawione pierwsze N
elementów (gdzie N jest ilością
argsów), reszta pozostaje niezmieniona. |
| -a |
allexport |
wszystkie nowe parametry zostają tworzone z cechą
eksportowania |
| -b |
notify |
Wypisuj komunikaty o zadaniach asynchronicznie, zamiast tuż
przed zachętą. Ma tylko znaczenia jeśli
została włączona kontrola zadań
(-m). |
| -C |
noclobber |
Zapobiegaj przepisywaniu istniejących już
plików poprzez przekierowania > (do wymuszenia
przepisania musi zostać zastosowane >|). |
| -e |
errexit |
Wyjdź (po wykonaniu komendy pułapki ERR)
tuż po wystąpieniu błędu lub
niepomyślnym wykonaniu jakiejś komendy (tzn.,
jeśli została ona zakończona niezerowym kodem
wyjścia). Nie dotyczy to komend, których kod
wyjścia zostaje jawnie przetestowany konstruktem powłoki
takim jak wyrażenia if, until, while,
&& lub ||. |
| -f |
noglob |
Nie rozwijaj wzorców nazw plików. |
| -h |
trackall |
Twórz śledzone aliasy dla wszystkich wykonywanych
komend (patrz "Aliasy" powyżej). Domyślnie
włączone dla nieinterakcyjnych powłok. |
| -i |
interactive |
Włącz tryb interakcyjny - może zostać
włączone/wyłączone jedynie podczas
odpalania powłoki. |
| -k |
keyword |
Przyporządkowania wartości parametrom zostają
rozpoznawane gdziekolwiek w komendzie. |
| -l |
login |
Powłoka ma być powłoką zameldowania -
może zostać
włączone/wyłączone jedynie podczas
odpalania powłoki (patrz "Uruchamianie
powłoki" powyżej). |
| -m |
monitor |
Włącz kontrolę zadań (domyślne
dla powłok interakcyjnych). |
| -n |
noexec |
Nie wykonuj jakichkolwiek komend - przydatne do sprawdzania
syntaktyki skryptów (ignorowane dla interakcyjnych
powłok). |
| -p |
privileged |
Ustawiane automatycznie, jeśli gdy powłoka zostaje
odpalona i rzeczywiste uid lub gid nie jest identyczne z odpowiednio
efektywnym uid lub gid. Patrz "Uruchamianie powłoki"
powyżej dla opisu, co to znaczy. |
| -r |
restricted |
Ustaw tryb ograniczony — ta opcja może zostać
jedynie zastosowana podczas odpalania powłoki. Patrz
"Uruchamianie powłoki" dla opisu, co to znaczy. |
| -s |
stdin |
Gdy zostanie zastosowane podczas odpalania powłoki,
wówczas komendy zostają wczytywane ze standardowego
wejścia. Ustawione automatycznie, jeśli powłoka
została odpalona bez jakichkolwiek argumentów.
Jeśli -s zostaje zastosowane w komendzie set,
wówczas podane argumenty zostają uporządkowane
zanim zostaną one przydzielone parametrom pozycyjnym (lub
ciągowi nazwa, jeśli -A zostało
zastosowane). |
| -u |
nounset |
Odniesienie do nieustawionego parametru zostaje traktowane jako
błąd, chyba że został zastosowany jeden z
modyfikatorów -, + lub =. |
| -v |
verbose |
Wypisuj wprowadzenia powłoki na standardowym wyjściu
błędów podczas ich wczytywania. |
| -x |
xtrace |
Wypisuj komendy i przyporządkowania parametrów podczas
ich wykonywania poprzedzone wartością PS4. |
| -X |
markdirs |
Podczas generowania nazw plików oznaczaj katalogi
kończącym /. |
| |
bgnice |
Zadania w tle zostają wykonywane z niższym
priorytetem. |
| |
braceexpand |
Włącz rozwijanie nawiasów (aka,
alternacja). |
| |
emacs |
Włącz edycję wiersza komendy w stylu BRL emacsa
(dotyczy wyłącznie powłok interakcyjnych); patrz
"Interakcyjna edycja wiersza poleceń w trybie
emacs". |
| |
gmacs |
Włącz edycję wiersza komendy w stylu gmacsa
(Gosling emacs) (dotyczy wyłącznie powłok
interakcyjnych); obecnie identyczne z trybem edycji emacs z
wyjątkiem tego, że przemiana (^T) zachowuje się
nieco inaczej. |
| |
ignoreeof |
Powłoka nie zostanie zakończona jeśli zostanie
wczytany znak zakończenia pliku. Należy
użyć jawnie exit. |
| |
nohup |
Nie zabijaj bieżących zadań sygnałem
HUP gdy powłoka zameldowania zostaje zakończona.
Obecnie ustawione domyślnie, co się jednak zmieni w
przyszłości w celu poprawienia kompatybilności z
oryginalnym Korn shell (który nie posiada tej opcji, aczkolwiek
wysyła sygnał HUP). |
| |
nolog |
Bez znaczenia - w oryginalnej powłoce Korn. Zapobiega
sortowaniu definicji funkcji w pliku historii. |
| |
physical |
Powoduje, że komendy cd oraz pwd stosują
`fizyczne' (tzn. pochodzące od systemu plików) ..
katalogi zamiast `logicznych' katalogów (tzn., że
powłoka interpretuje .., co pozwala użytkownikowi
nie troszczyć się o dowiązania symboliczne do
katalogów). Domyślnie wykasowane. Proszę
zwrócić uwagę, iż ustawianie tej opcji nie
wpływa na bieżącą wartość
parametru PWD; jedynie komenda cd zmienia PWD.
Patrz komendy cd i pwd powyżej dla dalszych
szczegółów. |
| |
posix |
Włącz tryb POSIX-owy. Patrz: "Tryb POSIX"
powyżej. |
| |
vi |
Włącz edycję wiersza komendy w stylu vi
(dotyczy tylko powłok interakcyjnych). |
| |
viraw |
Bez znaczenia - w oryginalnej powłoce Korna, dopóki
nie zostało ustawione viraw, tryb wiersza komendy vi
pozostawiał pracę napędowi tty aż do
wprowadzenia ESC (^[). pdksh jest zawsze w trybie viraw. |
| |
vi-esccomplete |
W trybie edycji wiersza komendy vi wykonuj rozwijania komend /
plików gdy zostanie wprowadzone escape (^[) w trybie
komendy. |
| |
vi-show8 |
Dodaj przedrostek `M-' dla znaków z ustawionym ósmym
bitem. Jeśli nie zostanie ustawiona ta opcja, wówczas,
znaki z zakresu 128-160 zostają wypisane bez zmian, co
może być przyczyną problemów. |
| |
vi-tabcomplete |
W trybie edycji wiersza komendy vi wykonuj rozwijania komend/
plików jeśli tab (^I) zostanie wprowadzone w trybie
wprowadzania. |
Tych opcji można użyć
również podczas odpalania powłoki. Obecny zestaw
opcji (z jednoliterowymi nazwami) znajduje się w parametrze
-. set -o bez podania nazwy opcji wyświetla
wszystkie opcja i informację o ich ustawieniu lub nie; set
+o wypisuje pełne nazwy opcji obecnie
włączonych.
Pozostałe argumenty, jeśli podano takowe,
są traktowane jako parametry pozycyjne i zostają
przyporządkowane, przy zachowaniu kolejności, parametrom
pozycyjnym (tzn., 1, 2, itd.). Jeśli
opcje kończą się -- i brak dalszych
argumentów, wówczas wszystkie parametry pozycyjne
zostają wyczyszczone. Jeśli nie podano żadnych
opcji lub argumentów, wówczas zostają
wyświetlone wartości wszystkich nazw. Z nieznanych
historycznych powodów, samotna opcja - zostaje traktowana
specjalnie: kasuje zarówno opcję -x, jak i
-v.
- shift
[liczba]
- Parametry pozycyjne liczba+1, liczba+2 itd.
zostają przeniesione pod 1, 2, itd.
liczba wynosi domyślnie 1.
- test
wyrażenie
- [ wyrażenie ]
- test wylicza wyrażenia i zwraca kod wyjścia
zero jeśli prawda, i kod 1 jeden jeśli fałsz, a
więcej niż 1 jeśli wystąpił
błąd. Zostaje zwykle zastosowane jako komenda warunkowa
wyrażeń if i while. Mamy do dyspozycji
następujące podstawowe wyrażenia:
| ciąg |
ciąg ma niezerową
długość. Proszę zwrócić
uwagę, iż mogą wystąpić
trudności jeśli ciąg okaże
się być operatorem (dokładniej, -r)
- ogólnie lepiej jest zamiast tego stosować test postaci
[ X"ciag" != X ] (podwójne
wycytowania zostają zastosowane jeśli ciąg
zawiera przerwy lub znaki rozwijania plików). |
| -r plik |
plik istnieje i jest
czytelny |
| -w plik |
plik istnieje i jest
zapisywalny |
| -x plik |
plik istnieje i jest
wykonywalny |
| -a plik |
plik istnieje |
| -e plik |
plik istnieje |
| -f plik |
plik jest zwykłym
plikiem |
| -d plik |
plik jest katalogiem |
| -c plik |
plik jest specjalnym plikiem
napędu ciągowego |
| -b plik |
plik jest specjalnym plikiem
napędu blokowego |
| -p plik |
plik jest potokiem nazwanym |
| -u plik |
plik o ustawionym bicie
setuid |
| -g plik |
plik' o ustawionym bicie
setgid |
| -k plik |
plik o ustawionym bicie
lepkości |
| -s plik |
plik nie jest pusty |
| -O plik |
właściciel pliku
zgadza się z efektywnym user-id powłoki |
| -G plik |
grupa pliku zgadza się z
efektywną group-id powłoki |
| -h plik |
plik jest symbolicznym [WK:
twardym?] dowiązaniem |
| -H plik |
plik jest zależnym od
kontekstu katalogiem (tylko sensowne pod HP-UX) |
| -L plik |
plik jest symbolicznym
dowiązaniem |
| -S plik |
plik jest gniazdem |
| -o opcja |
Opcja powłoki jest
ustawiona (patrz komenda set powyżej dla listy
możliwych opcji). Jako niestandardowe rozszerzenie,
jeśli opcja zaczyna się od !, to wynik testu
zostaje negowany; test wypada zawsze negatywnie gdy dana opcja nie
istnieje (tak więc [ -o coś -o -o
!coś ] zwraca prawdę tylko i tylko
wtedy, gdy opcja coś istnieje). |
| plik -nt plik |
pierwszy plik jest nowszy od
następnego pliku |
| plik -ot plik |
pierwszy plik jest starszy od
następnego pliku |
| plik -ef plik |
pierwszy plik jest
tożsamy z drugim plikiem |
| -t [fd] |
Deskryptor pliku jest przyrządem
tty. Jeśli nie została ustawiona opcja posix (set -o
posix, patrz "Tryb POSIX" powyżej),
wówczas fd może zostać pominięty,
co oznacza przyjęcie domyślnej wartości 1
(zachowanie się jest wówczas odmienne z powodu
specjalnych reguł POSIX-a opisywanych powyżej). |
| ciąg |
ciąg jest niepusty |
| -z ciąg |
ciąg jest pusty |
| -n ciąg |
ciąg jest niepusty |
| ciąg = ciąg |
ciągi są sobie
równe |
| ciąg == ciąg |
ciągi są sobie
równe |
| ciąg != ciąg |
ciągi się
różnią |
| liczba -eq liczba |
liczby są równe |
| liczba -ne liczba |
liczby różnią
się |
| liczba -ge liczba |
liczba jest większa lub
równa od drugiej |
| liczba -gt liczba |
liczba jest większa od
drugiej |
| liczba -le liczba |
liczba jest mniejsza lub równa
od drugiej |
| liczba -lt liczba |
liczba jest mniejsza od drugiej |
Powyższe podstawowe wyrażenie, w których
unarne operatory mają pierwszeństwo przed operatorami
binarnymi, mogą być stosowane w połączeniu z
następującymi operatorami (wymienionymi w
kolejności odpowiadającej ich pierwszeństwu):
| wyrażenie -o
wyrażenie |
logiczne lub |
| wyrażenie -a
wyrażenie |
logiczne i |
| ! wyrażenie |
logiczna negacja |
| ( wyrażenie ) |
grupowanie |
W systemie operacyjny niewspomagający
napędów /dev/fd/n (gdzie n jest
numerem deskryptora pliku), komenda test stara się je
emulować dla wszystkich testów operujących na
plikach (z wyjątkiem testu -e). W
szczególności., [ -w /dev/fd/2 ] sprawdza czy jest
dostępny zapis na deskryptor pliku 2.
Proszę zwrócić uwagę, że
zachodzą specjalne reguły (zawdzięczane ),
jeśli liczba argumentów do test lub [ ...
] jest mniejsza od pięciu: jeśli pierwsze argumenty
! mogą zostać pominięte, tak że
pozostaje tylko jeden argument, wówczas zostaje przeprowadzony
test długości ciągu (ponownie, nawet jeśli
dany argument jest unarnym operatorem); jeśli pierwsze argumenty
! mogą zostać pominięte tak, że
pozostają trzy argumenty i drugi argument jest operatorem
binarnym, wówczas zostaje wykonana dana binarna operacja (nawet
jeśli pierwszy argument jest unarnym operatorem operator, wraz z
nieusuniętym !).
Uwaga: Częstym błędem jest
stosowanie if [ $coś = tam ], co daje wynik negatywny
jeśli parametr coś jest zerowy lub nieustawiony,
zawiera przerwy (tzn., znaki z IFS), lub gdy jest
operatorem jednoargumentowym, takim jak ! lub -n.
Proszę zamiast tego stosować testy typu if [
"X$coś" = Xtam ].
- times
- Wyświetla zgromadzony czas w przestrzeni użytkownika oraz
systemu, który potrzebowała powłoka i w niej
wystartowane procesy, które się
zakończyły.
- trap [obrabiacz
sygnał ...]
- Ustawia obrabiacz, który należy wykonać w razie
odebrania danego sygnału. Obrabiacz może być
albo zerowym ciągiem, wskazującym na zamiar ignorowania
sygnałów danego typu, albo minusem (-),
wskazującym, że ma zostać podjęta akcja
domyślna dla danego sygnału (patrz signal(2 lub 3)), albo
ciągiem zawierającym komendy powłoki które
mają zostać wyliczone i wykonane przy pierwszej okazji
(tzn. po zakończeniu bieżącej komendy lub
przed wypisaniem następnego symboli zachęty PS1) po
odebraniu jednego z danych sygnałów. Signal jest
nazwą danego sygnału (tak jak np., PIPE lub ALRM) lub
jego numerem (patrz komenda kill -l powyżej).
Istnieją dwa specjalne sygnały: EXIT
(również znany jako 0), który zostaje wykonany
tuż przed zakończeniem powłoki, i ERR
który zostaje wykonany po wystąpieniu błędu
(błędem jest coś, co powodowałoby
zakończenie powłoki jeśli zostały ustawione
opcje -e lub errexit — patrz komendy set
powyżej). Obrabiacze EXIT zostają wykonane w
otoczeniu ostatniej wykonywanej komendy. Proszę
zwrócić uwagę, że dla powłok
nieinterakcyjnych obrabiacz wykroczeń nie może zostać
zmieniony dla sygnałów, które były ignorowane
podczas startu danej powłoki.
Bez argumentów, trap wylicza, jako seria komend
trap, obecny status wykroczeń, które zostały
ustawione od czasu startu powłoki.
Traktowanie sygnałów DEBUG oraz
ERR i EXIT i oryginalnej powłoki Korna w funkcjach
nie zostało jak do tej pory jeszcze zrealizowane.
- true
- Komenda kończąca się zerową
wartością kodu wyjścia.
- typeset
[[+-Ulprtux] [-L[n]] [-R[n]]
[-Z[n]] [-i[n]] | -f [-tux]]
[nazwa[=wartość] ...]
- Wyświetlaj lub ustawiaj wartości atrybutów
parametrów. Bez argumentów nazwa, zostają
wyświetlone atrybuty parametrów: jeśli brak
argumentów będących opcjami, zostają
wyświetlone atrybuty wszystkich parametrów jako komendy
typeset; jeśli podano opcję (lub - bez litery opcji)
wszystkie parametry i ich wartości posiadające dany atrybut
zostają wyświetlone; jeśli opcje zaczynają
się od +, to nie zostają wyświetlone
wartości parametrów.
Jeśli podano argumenty If nazwa, zostają
ustawione atrybuty danych parametrów (-) lub odpowiednio
wykasowane (+). Wartości parametrów mogą
zostać ewentualnie podane. Jeśli typeset zostanie
zastosowane wewnątrz funkcji, wszystkie nowotworzone parametry
pozostają lokalne dla danej funkcji.
Jeśli zastosowano -f, wówczas typeset
operuje na atrybutach funkcji. Tak jak dla parametrów,
jeśli brak nazws, zostają wymienione funkcje wraz z
ich wartościami (tzn., definicjami), chyba że
podano opcje zaczynające się od +, w którym
wypadku zostają wymienione tylko nazwy funkcji.
| -Ln |
Atrybut przyrównania do lewego brzegu: n oznacza
szerokość pola. Jeśli brak n, to zostaje
zastosowana bieżąca szerokość parametru
(lub szerokość pierwszej przyporządkowywanej
wartości). Prowadzące białe przerwy (tak jak i
zera, jeśli ustawiono opcję -Z) zostają
wykasowane. Jeśli trzeba, wartości zostają albo
obcięte lub dodane przerwy do osiągnięcia
wymaganej szerokości. |
| -Rn |
Atrybut przyrównania do prawego brzegu: n oznacza
szerokość pola. Jeśli brak n, to zostaje
zastosowana bieżąca szerokość parametru
(lub szerokość pierwszej przyporządkowywanej
wartości). Białe przerwy na końcu zostają
usunięte. Jeśli trzeba, wartości zostają
albo pozbawione prowadzących znaków albo przerwy
zostają dodane do osiągnięcia wymaganej
szerokości. |
| -Zn |
Atrybut wypełniania zerami: jeśli nie skombinowany z
-L, to oznacza to samo co -R, tylko, że do
rozszerzania zostaje zastosowane zero zamiast przerw. |
| -in |
Atrybut całkowitości: n podaje bazę do
zastosowania podczas wypisywania danej wartości
całkowitej (jeśli nie podano, to baza zostaje
zaczerpnięta z bazy zastosowanej w pierwszym
przyporządkowaniu wartości). Parametrom z tym atrybutem
mogą być przyporządkowywane wartości
zawierające wyrażenia arytmetyczne. |
| -U |
Atrybut dodatniej całkowitości: liczby
całkowite zostają wyświetlone jako
wartości bez znaku (stosowne jedynie w powiązaniu z
opcją -i). Tej opcji brak w oryginalnej powłoce
Korna. |
| -f |
Tryb funkcji: wyświetlaj lub ustawiaj funkcje i ich atrybuty,
zamiast parametrów. |
| -l |
Atrybut małej litery: wszystkie znaki z dużej litery
zostają w wartości zamienione na małe litery. (W
oryginalnej powłoce Korna, parametr ten oznaczał
`długi całkowity' gdy był stosowany w
połączeniu z opcją -i). |
| -p |
Wypisuj pełne komendy typeset, które można
następnie zastosować do odtworzenia danych
atrybutów (lecz nie wartości) parametrów. To jest
wynikiem domyślnym (opcja ta istnieje w celu zachowania
kompatybilności z ksh93). |
| -r |
Atrybut wyłącznego odczytu: parametry z danym
atrybutem nie przyjmują nowych wartości i nie
mogą zostać wykasowane. Po ustawieniu tego atrybutu nie
można go już więcej odaktywnić. |
| -t |
Atrybut zaznaczenia: bez znaczenia dla powłoki; istnieje
jedynie do zastosowania w aplikacjach. Dla funkcji -t, to
atrybut śledzenia. Jeśli zostają wykonywane
funkcje z atrybutem śledzenia, to opcja powłoki
xtrace (-x) zostaje tymczasowo
włączona. |
| -u |
Atrybut dużej litery: wszystkie znaki z małej litery w
wartościach zostają przestawione na duże litery.
(W oryginalnej powłoce Korna, ten parametr oznaczał
`całkowity bez znaku' jeśli został zastosowany w
połączeniu z opcją -i, oznaczało
to, że nie można było stosować
dużych liter dla baz większych niż 10. patrz
opcja -U). Dla funkcji, -u to atrybut niezdefiniowania.
Patrz "Funkcje" powyżej dla implikacji tego. |
| -x |
Atrybut eksportowania: parametry (lub funkcje) zostają
umieszczone w otoczenia wszelkich wykonywanych komend. Eksportowanie
funkcji nie zostało jeszcze do tej pory zrealizowane. |
- ulimit
[-acdfHlmnpsStvw] [wartość]
- Wyświetl lub ustaw ograniczenia dla procesów. Jeśli
brak opcji, to ograniczenie ilości plików (-f)
zostaje przyjęte jako domyśle. wartość,
jeśli podana, może być albo wyrażeniem
arytmetycznym lub słowem unlimited (nieograniczone).
Ograniczenia dotyczą powłoki i wszelkich procesów
przez nią tworzonych po nadaniu ograniczenia. Proszę
zwrócić uwagę, iż niektóre systemy
mogą zabraniać podnoszenia wartości ograniczeń
po ich nadaniu. Ponadto proszę zwrócić uwagę,
że rodzaje dostępnych ograniczeń zależą
od danego systemu - niektóre systemy posiadają jedynie
możliwość ograniczania -f.
- -a
- Wyświetla wszystkie ograniczenia; jeśli nie podano
-H, to zostają wyświetlone ograniczenia
miękkie.
- -H
- Ustaw jedynie ograniczenie twarde (domyślnie zostają
ustawione zarówno ograniczenie twarde jak też i
miękkie).
- -S
- Ustaw jedynie ograniczenie miękkie (domyślnie zostają
ustawione zarówno ograniczenie twarde jak też i
miękkie).
- -c
- Ogranicz wielkości plików zrzutów core do n
bloków.
- -d
- Ogranicz wielkość obszaru danych do n
kilobajtów.
- -f
- Ogranicz wielkość plików zapisywanych przez
powłokę i jej programy pochodne do n bloków
(pliki dowolnej wielkości mogą być wczytywane).
- -l
- Ogranicz do n kilobajtów ilość podkluczonej
(podpiętej) fizycznej pamięci.
- -m
- Ogranicz do n kilobajtów ilość używanej
fizycznej pamięci.
- -n
- Ogranicz do n liczbę jednocześnie otwartych
deskryptorów plików.
- -p
- Ogranicz do n liczbę jednocześnie wykonywanych
procesów danego użytkownika.
- -s
- Ogranicz do n kilobajtów rozmiar obszaru stosu.
- -t
- Ogranicz do n sekund czas zużywany przez pojedyncze
procesy.
- -v
- Ogranicz do n kilobajtów ilość używanej
wirtualnej pamięci; pod niektórymi systemami jest to
maksymalny stosowany wirtualny adres (w bajtach, a nie w
kilobajtach).
- -w
- Ogranicz do n kilobajtów ilość stosowanego
obszaru odkładania.
Dla ulimit blok to zawsze 512 bajtów.
- umask [-S]
[maska]
Wyświetl lub ustaw maskę zezwoleń w
tworzeniu plików, lub umask (patrz
umask(2)). Jeśli
zastosowano opcję
-S, maska jest wyświetlana lub podawana
symbolicznie, w przeciwnym razie jako liczba ósemkowa.
Symboliczne maski są podobne do tych stosowanych przez
chmod(1):
[ugoa]{{=+-}{rwx}*}+[,...]
gdzie pierwsza grupa znaków jest częścią
kto,
a druga grupa częścią
op, i ostatnio grupa
częścią
perm. Część
kto określa, która część umaski ma
zostać zmodyfikowana. Litery oznaczają:
- u
- prawa użytkownika
- g
- prawa grupy
- o
- prawa pozostałych (nieużytkownika, niegrupy)
- a
- wszelkie prawa naraz (użytkownika, grupy i pozostałych)
Część op wskazuję jak prawa
kto mają być zmienione:
- =
- nadaj
- +
- dodaj do
- -
- usuń z
Część perm wskazuje które prawa
mają zostać nadane, dodane lub usunięte:
- r
- prawo czytania
- w
- prawo zapisu
- x
- prawo wykonywania
Gdy stosuje się maski symboliczne, to opisują one,
które prawa mogą zostać udostępnione (w
przeciwieństwie do masek ósemkowych, w których
ustawienie bitu oznacza, że ma on zostać wykasowany).
Przykład: `ug=rwx,o=' ustawia maskę tak, że pliki nie
będą odczytywalne, zapisywalne i wykonywalne przez `innych'.
Jest ono równoważne (w większości
systemów) oktalnej masce `07'.
- unalias
[-adt] [nazwa1 ...]
- Aliasy dla danej nazwy zostają usunięte. Gdy zastosowano
opcję -a, to wszelkie aliasy zostają usunięte.
Gdy zastosowano opcję -t lub -d, to wymienione
operacje zostają wykonane jedynie na śledzonych lub
odpowiednio aliasach katalogów.
- unset [-fv]
parametr ...
- Kasuj wymienione parametry (-v, oznacza domyślne) lub
funkcje (-f). Status zakończenia jest niezerowy jeśli
któryś z danych parametrów był już
wykasowany, a zero z przeciwnym razie.
- wait
[zadanie]
- Czekaj na zakończenie danego zadania/zadań. Kodem
wyjścia wait jest kod ostatniego podanego zadania: jeśli
dane zadanie zostało zabite sygnałem, kod wyjścia
wynosi 128 + numer danego sygnału (patrz kill -l
kod_wyjścia powyżej); jeśli ostatnie dane
zadanie nie może zostać odnalezione (bo nigdy nie
istniało lub już zostało zakończone), to kod
zakończenia wait wynosi 127. Patrz "Kontrola
zadań" poniżej w celu informacji o formacie
zadanie. Wait zostaje zakończone jeśli zajdzie
sygnał, na który został ustawiony obrabiacz, lub gdy
zostanie odebrany sygnał HUP, INT lub QUIT.
Jeśli nie podano zadań, wait wait czeka
na zakończenie wszelkich obecnych zadań (jeśli
istnieją takowe) i kończy się zerowym kodem
wyjścia. Jeśli kontrola zadań została
włączona, to zostaje wyświetlony kod wyjścia
zadań (to nie ma miejsca, jeśli zadania zostały
jawnie podane).
- whence [-pv]
[nazwa ...]
- Dla każdej nazwy zostaje wymieniony odpowiednio typ komendy
(reserved word, built-in, alias, function, tracked alias lub executable).
Jeśli podano opcję -p, to zostaje odszukana
ścieżka dla nazw, będących
zarezerwowanymi słowami, aliasami, itp. Bez opcji -v
whence działa podobnie do command -v, poza tym,
że whence odszukuje zarezerwowane słowa i nie
wypisuje aliasów jako komendy alias; z opcją -v,
whence to to samo co command -V. Zauważ, że
dla whence, opcja -p nie ma wpływu na
przeszukiwaną ścieżkę, tak jak dla
command. Jeśli typ jednej lub więcej
spośród nazw nie mógł zostać ustalony
to kod wyjścia jest niezerowy.
Kontrola zadań oznacza zdolność
powłoki to monitorowania i kontrolowania wykonywanych
zadań, które są procesami lub grupami
procesów tworzonych przez komendy lub potoki. Powłoka
przynajmniej śledzi status obecnych zadań w tle (tzn.,
asynchronicznych); tę informację można otrzymać
wykonując komendę jobs. Jeśli została
uaktywniona pełna kontrola zadań (stosując set
-m lub set -o monitor), tak jak w powłokach
interakcyjnych, to procesy pewnego zadania zostają umieszczane we
własnej grupie procesów, pierwszoplanowe zadnia mogą
zostać zatrzymane przy pomocy klawisza wstrzymania z terminalu
(zwykle ^Z), zadania mogą zostać ponownie podjęte albo
na pierwszym planie albo w tle, stosując odpowiednio komendy
fg i bg, i status terminala zostaje zachowany a
następnie odtworzony, jeśli zadanie na pierwszym planie
zostaje zatrzymane lub odpowiednio wznowione.
Proszę zwrócić uwagę, że tylko
komendy tworzące procesy (tzn., komendy asynchroniczne,
komendy podpowłok i niewbudowane komendy nie będące
funkcjami) mogą zostać wstrzymane; takie komendy jak
read nie mogą tego.
Gdy zostaje stworzone zadanie, to przyporządkowuje mu
się numer zadania. Dla interakcyjnych powłok, numer ten
zostaje wyświetlony w [..], i w następstwie
identyfikatory procesów w zadaniu, jeśli zostaje wykonywane
asynchroniczne zadanie. Do zadania możemy odnosić się w
komendach bg, fg, jobs, kill i wait albo
poprzez id ostatniego procesu w potoku komend (tak jak jest on zapisywany w
parametrze $!) lub poprzedzając numer zadania znakiem procentu
(%). Również następujące sekwencję
z procentem mogą być stosowane do odnoszenia się do
zadań:
| %+ |
Ostatnio zatrzymane zadanie lub, gdy brak zatrzymanych zadań,
najstarsze wykonywane zadanie. |
| %%, % |
To samo co %+. |
| %- |
Zadanie, które byłoby pod %+ gdyby nie
zostało zakończone. |
| %n |
Zadanie z numerem zadania n. |
| %?ciąg |
Zadanie zawierające ciąg ciąg
(występuje błąd, gdy odpowiada mu kilka
zadań). |
| %ciąg |
Zadanie zaczynające się ciągiem ciąg
(występuje błąd, gdy odpowiada mu kilka
zadań). |
Jeśli zadanie zmienia status (tzn., gdy zadanie w
tle zostaje zakończone lub zadanie na pierwszym planie zostaje
wstrzymane), powłoka wyświetla następujące
informacje o statusie:
[numer] flaga status
komenda
gdzie
- numer
- to numer danego zadania.
- flaga
- jest + lub - jeśli zadaniem jest odpowiednio zadanie
z %+ lub %-, lub przerwa jeśli nie jest ani jednym
ani drugim.
- status
- Wskazuje obecny stan danego zadania i może to być
- Running
- Zadanie nie jest ani wstrzymane ani zakończone (proszę
zwrócić uwagę, iż przebieg nie koniecznie musi
oznaczać spotrzebowywanie czasu CPU — proces może
być zablokowany, czekając na pewne zajście).
- Done
[(numer)]
- zadanie zakończone. numer to kod wyjścia danego
zadania, który zostaje pominięty, jeśli wynosi on
zero.
- Stopped
[(sygnał)]
- zadanie zostało wstrzymane danym sygnałem
sygnał (gdy brak sygnału, to zadanie zostało
zatrzymane przez SIGTSTP).
- opis-sygnału
[(core dumped)]
- zadanie zostało zabite sygnałem (tzn.,
Memory fault, Hangup, itp. — zastosuj kill -l
dla otrzymania listy opisów sygnałów).
Wiadomość (core dumped) wskazuje, że
proces stworzył plik zrzutu core.
- command
- to komenda, która stworzyła dany proces. Jeśli dane
zadanie zawiera kilka procesów, to każdy proces zostanie
wyświetlony w osobnym wierszy pokazującym jego
command i ewentualnie jego status, jeśli jest on
odmienny od statusu poprzedniego procesu.
Jeśli próbuje się zakończyć
powłokę, podczas gdy istnieją zadania w stanie
zatrzymania, to powłoka ostrzega użytkownika, że
są zadania w stanie zatrzymania i nie kończy pracy. Gdy
tuż potem zostanie podjęta ponowna próba
zakończenia powłoki, to zatrzymane zadania otrzymują
sygnał HUP i powłoka kończy pracę.
podobnie, jeśli nie została ustawiona opcja nohup, i
są zadania w pracy, gdy zostanie podjęta próba
zakończenia powłoki zameldowania, powłoka ostrzega
użytkownika i nie kończy pracy. Gdy tuż potem zostanie
ponownie podjęta próba zakończenia pracy
powłoki, to bieżące procesy otrzymują
sygnał HUP i powłoka kończy pracę.
Jeśli została ustawiona opcja emacs,jest
włączona interakcyjna edycja wiersza wprowadzeń.
Ostrzeżenie: Ten tryb zachowuje się nieco inaczej
niż tryb emacsa w oryginalnej powłoce Korna i 8-my bit zostaje
wykasowany w trybie emacsa. W trybie tym różne komendy edycji
(zazwyczaj podłączone pod jeden lub więcej
znaków sterujących) powodują natychmiastowe akcje bez
odczekiwania następnego przełamania wiersza. Wiele komend
edycji jest związywanych z pewnymi znakami sterującymi podczas
odpalania powłoki; te związki mogą zostać
zmienione przy pomocy następujących komend:
- bind
- Obecne związki zostają wyliczone.
- bind
ciąg=[komenda-edycji]
- Dana komenda edycji zostaje podwiązana pod dany ciąg,
który powinien składać się ze znaku
sterującego (zapisanego przy pomocy strzałki w
górę ^X), poprzedzonego ewentualnie jednym z
dwóch znaków przedsionkownych. Wprowadzenie danego
ciągu będzie wówczas powodowało
bezpośrednie wywołanie danej komendy edycji. Proszę
zwrócić uwagę, że choć tylko dwa znaki
przedsionkowe (zwykle ESC i ^X) są wspomagane, to mogą
również zostać podane niektóre ciągi
wieloznakowe. Następujące podłącza klawisze
terminala ANSI lub xterm (które są w domyślnych
podwiązaniach). Oczywiście niektóre sekwencje
wyprowadzenia nie chcą działać tak gładko:
bind '^[['=prefix-2
bind '^XA'=up-history
bind '^XB'=down-history
bind '^XC'=forward-char
bind '^XD'=backward-char
- bind -l
- Wymień nazwy funkcji, do których można
podłączyć klawisze.
- bind -m
ciąg=[podstawienie]
- Dany ciąg wprowadzenia ciąg zostanie zamieniony
bezpośrednio na dane podstawienie, które może
zawierać komendy edycji.
Następuje lista dostępnych komend edycji.
Każdy z poszczególnych opisów zaczyna się
nazwą komendy, literą n, jeśli komenda
może zostać poprzedzona licznikiem, i wszelkimi klawiszami, do
których dana komenda jest podłączona domyślnie
(w zapisie stosującym notację strzałkową,
tzn., znak ASCII ESC jest pisany jako ^[). Licznik
poprzedzający komendę wprowadzamy stosując ciąg
^[n, gdzie n to ciąg składający
się z jednej lub więcej cyfr; chyba że podano inaczej
licznik, jeśli został pominięty, wynosi
domyślnie 1. Proszę zwrócić uwagę,
że nazwy komend edycji stosowane są jedynie w komendzie
bind. Ponadto, wiele komend edycji jest przydatnych na terminalach z
widocznym kursorem. Domyślne podwiązania zostały
wybrane tak, aby były zgodne z odpowiednimi podwiązaniami
Emacsa. Znaki użytkownika tty (w szczególności,
ERASE) zostały podłączenia do stosownych
podstawień i kasują domyślne
podłączenia.
- abort ^G
- Przydatne w odpowiedzi na zapytanie o wzorzec
przeszukiwania_historii do przerwania tego szukania.
- auto-insert
n
- Powoduje po prostu wyświetlenie znaku jako bezpośrednie
wprowadzenie. Większość zwykłych znaków
jest pod to podłączona.
- backward-char
n ^B
- Przesuwa kursor n znaków wstecz.
- backward-word
n ^[B
- Przesuwa kursor wstecz na początek słowa; słowa
składają się ze znaków alfanumerycznych,
podkreślenia (_) i dolara ($).
- beginning-of-history
^[<
- Przesuwa na początek historii.
- beginning-of-line
^A
- Przesuwa kursor na początek edytowanego wiersza wprowadzenia.
- capitalize-word
n ^[c, ^[C
- Przemienia pierwszy znak w następnych n słowach na
dużą literę, pozostawiając kursor za
końcem ostatniego słowa. Jeśli bieżący
wiersz nie zaczyna się od znaku komentarza, zostaje on dodany na
początku wiersza i wiersz zostaje wprowadzony (tak jakby
naciśnięto przełamanie wiersza), w przeciwnym razie
istniejące znaki komentarza zostają usunięte i kursor
zostaje umieszczony na początku wiersza.
- complete
^[^[
- Automatycznie dopełnia tyle ile jest jednoznaczne w nazwie komendy
lub nazwie pliku zawierającej kursor. Jeśli cała
pozostała część komendy lub nazwy pliku jest
jednoznaczna to przerwa zostaje wyświetlona po wypełnieniu,
chyba że jest to nazwa katalogu, w którym to razie zostaje
dołączone /. Jeśli nie ma komendy lub nazwy
pliku zaczynającej się od takiej części
słowa, to zostaje wyprowadzony znak dzwonka (zwykle powodujacy
słyszalne zabuczenie).
- complete-command
^X^[
- Automatycznie dopełnia tyle ile jest jednoznaczne z nazwy komendy
zawierającej częściowe słowo przed kursorem,
tak jak w komendzie complete opisanej powyżej.
- complete-file
^[^X
- Automatycznie dopełnia tyle ile jest jednoznaczne z nazwy pliku
zawierającego częściowe słowo przed kursorem,
tak jak w komendzie complete opisanej powyżej.
- complete-list
^[=
- Wymień możliwe dopełnienia bieżącego
słowa.
- delete-char-backward
n ERASE, ^?, ^H
- Skasuj n znaków przed kursorem.
- delete-char-forward
n
- Skasuj n znaków po kursorze.
- delete-word-backward
n ^[ERASE, ^[^?, ^[^H, ^[h
- Skasuj n słów przed kursorem.
- delete-word-forward
n ^[d
- Kasuje znaki po kursorze, aż do końca n
słów.
- down-history
n ^N
- Przewija bufor historii w przód n wierszy
(później). Każdy wiersz wprowadzenia zaczyna
się oryginalnie tuż po ostatnim miejscu w buforze historii,
tak więc down-history nie jest przydatny dopóki nie
wykonano search-history lub up-history.
- downcase-word
n ^[L, ^[l
- Zamień na małe litery następnych n
słów.
- end-of-history
^[>
- Porusza do końca historii.
- end-of-line
^E
- Przesuwa kursor na koniec wiersza wprowadzenia.
- eot ^_
- Działa jako koniec pliku; Jest to przydatne, albowiem tryb edycji
wprowadzenia wyłącza normalną regularyzację
wprowadzenia terminala.
- eot-or-delete
n ^D
- Działa jako eot jeśli jest samotne na wierszu; w przeciwnym
razie działa jako delete-char-forward.
- error
- Error (ring the bell).
- exchange-point-and-mark
^X^X
- Umieść kursor na znaczniku i ustaw znacznik na miejsce, w
którym był kursor.
- expand-file
^[*
- Dodaje * do bieżącego słowa i zastępuje dane
słowo wynikiem rozwinięcia nazwy pliku na danym
słowie. Gdy nie pasują żadne pliki,
zadzwoń.
- forward-char
n ^F
- Przesuwa kursor naprzód o n znaków.
- forward-word
n ^[f
- Przesuwa kursor naprzód na zakończenie n-tego
słowa.
- goto-history
n ^[g
- Przemieszcza do historii numer n.
- kill-line
KILL
- Kasuje cały wiersz wprowadzenia.
- kill-region
^W
- Kasuje wprowadzenie pomiędzy kursorem a znacznikiem.
- kill-to-eol
n ^K
- Jeśli ominięto n, to kasuje wprowadzenia od kursora
do końca wiersza, w przeciwnym razie kasuje znaki pomiędzy
kursorem a n-tą kolumną.
- list ^[?
- Wyświetla sortowaną, skolumnowaną listę nazw
komend lub nazw plików (jeśli są takowe),
które mogłyby dopełnić częściowe
słowo zawierające kursor. Do nazw katalogów zostaje
dołączone /.
- list-command
^X?
- Wyświetla sortowaną, skolumnowaną listę nazw
komend (jeśli są takowe), które mogłyby
dopełnić częściowe słowo
zawierające kursor.
- list-file
^X^Y
- Wyświetla sortowaną, skolumnowaną listę nazw
plików (jeśli są takowe), które mogłyby
dopełnić częściowe słowo
zawierające kursor. Specyfikatory rodzaju plików
zostają dołączone tak jak powyżej opisano pod
list.
- newline ^J,
^M
- Powoduje przetworzenie bieżącego wiersza wprowadzeń
przez powłokę. Kursor może znajdować
się aktualnie gdziekolwiek w wierszu.
- newline-and-next
^O
- Powoduje przetworzenie bieżącego wiersza wprowadzeń
przez powłokę, po czym następny wiersz z historii
staje się wierszem bieżącym. Ma to tylko sens po
poprzednim up-history lub search-history.
- no-op QUIT
- Nie robi nic.
- prefix-1
^[
- Przedsionek 1-znakowej sekwencji komendy.
- prefix-2
^X
- prefix-2
^[[
- Przedsionek 2-znakowej sekwencji komendy.
- prev-hist-word
n ^[., ^[_
- Ostatnie (n-te) słowo poprzedniej komendy zostaje
wprowadzone na miejscu kursora.
- quote ^^
- Następny znak zostaje wzięty dosłownie zamiast jako
komenda edycji.
- redraw ^L
- Przerysuj ponownie zachętę i bieżący wiersz
wprowadzenia.
- search-character-backward
n ^[^]
- Szukaj w tył w bieżącym wierszu n-tego
wystąpienia następnego wprowadzonego znaku.
- search-character-forward
n ^]
- Szukaj w przód w bieżącym wierszu n-tego
wystąpienia następnego wprowadzonego znaku.
- search-history
^R
- Wejdź w kroczący tryb szukania. Wewnętrzna lista
historii zostaje przeszukiwana wstecz za komendami odpowiadającymi
wprowadzeniu. początkowe ^ w szukanym ciągu
zakotwicza szukanie. Klawisz przerwania powoduje opuszczenie trybu
szukania. Inne komendy zostaną wykonywane po opuszczeniu trybu
szukania. Ponowne komendy search-history kontynuują szukanie
wstecz do następnego poprzedniego wystąpienia wzorca. Bufor
historii zawiera tylko skończoną ilość
wierszy; dla potrzeby najstarsze zostają wyrzucone.
- set-mark-command
^[<space>
- Postaw znacznik na bieżącej pozycji kursora.
- stuff
- Pod systemami to wspomagającymi, wypycha podłączony
znak z powrotem do wejścia terminala, gdzie może on
zostać specjalnie przetworzony przez terminal. Jest to przydatne
np. dla opcji BRL ^T minisystata.
- stuff-reset
- Działa tak jak stuff, a potem przerywa wprowadzenie tak jak
przerwanie.
- transpose-chars
^T
- Na końcu wiersza lub jeśli włączono
opcję gmacs, zamienia dwa poprzedzające znaki; w
przeciwnym razie zamienia poprzedni i bieżący znak, po czym
przesuwa kursor jeden znak na prawo.
- up-history
n ^P
- Przewija bufor historii n wierszy wstecz (wcześniej).
- upcase-word
n ^[U, ^[u
- Zamienia następnych n słów w duże
litery.
- version
^V
- Wypisuje wersję ksh. Obecny bufor edycji zostaje odtworzony gdy
tylko zostanie naciśnięty jakikolwiek klawisz (po czym ten
klawisz zostaje przetworzony, chyba że
jest to przerwa).
- yank ^Y
- Wprowadź ostatnio skasowany ciąg tekstu na
bieżącą pozycję kursora.
- yank-pop
^[y
- bezpośrednio po yank, zamienia wprowadzony tekst na
następny poprzednio skasowany ciąg tekstu.
Edytor vi wiersza komendy w ksh obsługuje w zasadzie te
same komendy co edytor vi (patrz vi(1)), poza
następującymi wyjątkami:
- •
- zaczyna w trybie wprowadzania,
- •
- ma komendy uzupełniania nazw plików i komend (=,
\, *, ^X, ^E, ^F i, opcjonalnie,
<tab>),
- •
- komenda _ działa odmiennie (w ksh jest to komenda ostatniego
argumentu, a w vi przechodzenie do początku bieżącego
wiersza),
- •
- komendy / i G poruszają się w kierunkach
odwrotnych do komendy j
- •
- brak jest komend, które nie mają znaczenia w edytorze
obsługującym jeden wiersz (w
szczególności, przewijanie ekranu, komendy ex :,
itp.).
Proszę zwrócić uwagę, że
^X oznacza control-X; oraz <esc>, <space> i
<tab> stosowane są za escape, space i tab, odpowiednio
(bez żartów).
Tak jak w vi, są dwa tryby: tryb wprowadzania i tryb
komend. W trybie wprowadzania, większość znaków
zostaje po prostu umieszczona w buforze na bieżącym miejscu
kursora w kolejności ich wpisywania, chociaż niektóre
znaki zostają traktowane specjalnie. W szczególności
następujące znaki odpowiadają obecnym ustawieniom tty
(patrz stty(1)) i zachowują ich normalne znaczenia (normalne
wartości są podane w nawiasach): skasuj (^U),
wymaż (^?), wymaż słowo (^W), eof
(^D), przerwij (^C) i zakończ (^\). Poza
powyższymi dodatkowo również następujące
znaki zostają traktowane specjalnie w trybie wprowadzania:
| ^H |
kasuje poprzedni znak |
| ^V |
bezpośrednio następny: następny
naciśnięty znak nie zostaje traktowany specjalnie
(można tego użyć do wprowadzenia opisywanych tu
znaków) |
| ^J ^M |
koniec wiersza: bieżący wiersz zostaje wczytany,
rozpoznany i wykonany przez powłokę |
| <esc> |
wprowadza edytor w tryb komend (patrz poniżej) |
| ^E |
wyliczanie komend i nazw plików (patrz poniżej) |
| ^F |
dopełnianie nazw plików (patrz poniżej).
Jeśli zostanie użyte dwukrotnie, to wówczas
wyświetla listę możliwych dopełnień;
jeśli zostanie użyte trzykrotnie, to kasuje
dopełnienie. |
| ^X |
rozwijanie nazw komend i plików (patrz poniżej) |
| <tab> |
opcjonalnie dopełnianie nazw plików i komend (patrz
^F powyżej), włączane przez set -o
vi-tabcomplete |
Jeśli jakiś wiersz jest dłuższy od
szerokości ekranu (patrz parametr COLUMNS), to zostaje
wyświetlony znak >, + lub < w ostatniej
kolumnie, wskazujący odpowiednio na więcej znaków po,
przed i po, oraz przed obecną pozycją. Wiersz jest przewijany
poziomo w razie potrzeby.
W trybie komend, każdy znak zostaje interpretowany jako
komenda. Znaki którym nie odpowiada żadna komenda,
które są niedopuszczalną komendą lub są
komendami nie do wykonania, wszystkie wyzwalają dzwonek. W
następujących opisach komend, n wskazuje, że
komendę można poprzedzić numerem (tzn.,
10l przesuwa w prawo o 10 znaków); gdy brak przedrostka
numerowego, to zakłada się, że n jest
równe 1, chyba że powiemy inaczej. Zwrot
`bieżąca pozycja' odnosi się do pozycji pomiędzy
kursorem a znakiem przed nim. `Słowo' to ciąg liter, cyfr lub
podkreśleń albo ciąg nie nieliter, niecyfr,
niepodkreśleń, niebiałych-znaków (tak
więc, ab2*&^ zawiera dwa słowa), oraz `duże
słowo' jest ciągiem niebiałych znaków.
- Specjalne ksh
komendy vi
- Następujących komend brak lub są one odmienne od tych
w normalnym edytorze plików vi:
- n_
- wprowadź przerwę z następstwem n-tego
dużego słowa z ostatniej komendy w historii na
bieżącej pozycji i wejdź w tryb wprowadzania;
jeśli nie podano n to domyślnie zostaje wprowadzone
ostatnie słowo.
- #
- wprowadź znak komentarza (#) na początku
bieżącego wiersza i przekaż ten wiersz do
powłoki ( tak samo jak I#^J).
- ng
- tak jak G, z tym że, jeśli nie podano n to
dotyczy to ostatnio zapamiętanego wiersza.
- nv
- edytuj wiersze n stosując edytor vi; jeśli nie podano
n, to edytuje bieżący wiersz.
Właściwą wykonywaną komendą jest `fc
-e ${VISUAL:-${EDITOR:-vi}} n'.
- * i ^X
- dopełnianie komendy lub nazwy pliku zostaje zastosowane do obecnego
dużego słowa (po dodaniu *, jeśli to słowo nie
zawiera żadnych znaków dopełniania nazw
plików) - duże słowo zostaje zastąpione
słowami wynikowymi. Jeśli bieżące duże
słowo jest pierwszym w wierszu (lub występuje po jednym z
następujących znaków: ;, |,
&, (, )) i nie zawiera ukośnika (/)
to rozwijanie komendy zostaje wykonane, w przeciwnym razie zostaje
wykonane rozwijanie nazwy plików. Rozwijanie komend podpasowuje
duże słowo pod wszelkie aliasy, funkcje i wbudowane komendy
jak i również wszelkie wykonywalne pliki odnajdywane
przeszukując katalogi wymienione w parametrze PATH.
Rozwijanie nazw plików dopasowuje duże słowo do nazw
plików w bieżącym katalogu. Po rozwinięciu,
kursor zostaje umieszczony tuż po ostatnim słowie na
końcu i edytor jest w trybie wprowadzania.
- n\,
n^F, n<tab> i
n<esc>
- dopełnianie nazw komend/plików: zastępuje
bieżące duże słowo najdłuższym,
jednoznacznym dopasowaniem otrzymanym przez rozwinięcie nazwy
komendy/pliku. <tab> zostaje jedynie rozpoznane jeśli
została włączona opcja vi-tabcomplete, podczas
gdy <esc> zostaje jedynie rozpoznane jeśli
została włączona opcja vi-esccomplete (patrz
set -o). Jeśli podano n to zostaje użyte
n-te możliwe dopełnienie (z tych zwracanych przez
komendę wyliczania dopełnień nazw
komend/plików).
- = i ^E
- wyliczanie nazw komend/plików: wymień wszystkie komendy lub
pliki pasujące pod obecne duże słowo.
- ^V
- wyświetl wersję pdksh; jest ona wyświetlana do
następnego naciśnięcia klawisza (ten klawisz zostaje
zignorowany).
- @c
- rozwinięcie makro: wykonaj komendy znajdujące się w
aliasie _c.
- Komendy przemieszczania
w wierszu
- nh i
n^H
- przesuń się na lewo n znaków.
- nl i
n<space>
- przesuń się w prawo n znaków.
- 0
- przesuń się do kolumny 0.
- ^
- przesuń się do pierwszego niebiałego znaku.
- n|
- przesuń się do kolumny n.
- $
- przesuń się do ostatniego znaku.
- nb
- przesuń się wstecz n słów.
- nB
- przesuń się wstecz n dużych
słów.
- ne
- przesuń się na przód do końca słowo
n razy.
- nE
- przesuń się na przód do końca dużego
słowa n razy.
- nw
- przesuń się na przód o n
słów.
- nW
- przesuń się na przód o n dużych
słów.
- %
- odnajdź wzór: edytor szuka do przodu najbliższego
nawiasu zamykającego (okrągłego, prostokątnego
lub klamrowego), a następnie przesuwa się między nim
a odpowiadającym mu nawiasem otwierającym.
- nfc
- przesuń się w przód do n-tego
wystąpienia znaku c.
- nFc
- przesuń się w tył do n-tego wystąpienia
znaku c.
- ntc
- przesuń się w przód tuż przed n-te
wystąpienie znaku c.
- nTc
- przesuń się w tył tuż przed n-te
wystąpienie znaku c.
- n;
- powtarza ostatnią komendę f, F, t lub
T.
- n,
- powtarza ostatnią komendę f, F, t lub
T, lecz porusza się w przeciwnym kierunku.
- Komendy
przemieszczania między wierszami
- nj,
n+ i n^N
- przejdź do n-tego następnego wiersza w historii.
- nk,
n- i n^P
- przejdź do n-tego poprzedniego wiersza w historii.
- nG
- przejdź do wiersza n w historii; jeśli brak n,
to przenosi się do pierwszego zapamiętanego wiersza w
historii.
- ng
- tak jak G, tylko, że jeśli nie podano n to
idzie do ostatnio zapamiętanego wiersza.
- n/ciąg
- szukaj wstecz w historii n-tego wiersza zawierającego
ciąg; jeśli ciąg zaczyna się od
^, to reszta ciągu musi występować na samym
początku wiersza historii aby pasowała.
- n?string
- tak jak /, tylko, że szuka do przodu w historii.
- nn
- szukaj n-tego wystąpienia ostatnio szukanego ciągu;
kierunek jest ten sam co kierunek ostatniego szukania.
- nN
- szukaj n-tego wystąpienia ostatnio szukanego ciągu;
kierunek jest przeciwny do kierunku ostatniego szukania.
- Komendy
edycji
- na
- dodaj tekst n-krotnie: przechodzi w tryb wprowadzania tuż po
bieżącej pozycji. Dodanie zostaje jedynie wykonane,
jeśli zostanie ponownie uruchomiony tryb komendy (tzn.,
jeśli <esc> zostanie użyte).
- nA
- tak jak a, z tą różnicą, że
dodaje do końca wiersza.
- ni
- dodaj tekst n-krotnie: przechodzi w tryb wprowadzania na
bieżącej pozycji. Dodanie zostaje jedynie wykonane,
jeśli zostanie ponownie uruchomiony tryb komendy (tzn.,
jeśli <esc> zostanie użyte).
- nI
- tak jak i, z tą różnicą, że
dodaje do tuż przed pierwszym niebiałym znakiem.
- ns
- zamień następnych n znaków (tzn.,
skasuj te znaki i przejdź do trybu wprowadzania).
- S
- zastąp cały wiersz: wszystkie znaki od pierwszego
niebiałego znaku do końca wiersza zostają skasowane i
zostaje uruchomiony tryb wprowadzania.
- nckomenda-przemieszczenia
- przejdź z bieżącej pozycji do pozycji
wynikającej z n komenda-przemieszczenias (tj.,
skasuj wskazany region i wejdź w tryb wprowadzania); jeśli
komendą-przemieszczenia jest c, to wiersz zostaje
zmieniony od pierwszego niebiałego znaku począwszy.
- C
- zmień od obecnej pozycji do końca wiersza (tzn.
skasuj do końca wiersza i przejdź do trybu
wprowadzania).
- nx
- skasuj następnych n znaków.
- nX
- skasuj poprzednich n znaków.
- D
- skasuj do końca wiersza.
- ndmove-cmd
- skasuj od obecnej pozycji do pozycji wynikającej z n
krotnego move-cmd; move-cmd może być
komendą przemieszczania (patrz powyżej) lub d, co
powoduje skasowanie bieżącego wiersza.
- nrc
- zamień następnych n znaków na znak
c.
- nR
- zamień: wejdź w tryb wprowadzania lecz przepisuj
istniejące znaki zamiast wprowadzania przed istniejącymi
znakami. Zamiana zostaje wykonana n krotnie.
- n~
- zmień wielkość następnych n
znaków.
- nymove-cmd
- wytnij od obecnej pozycji po pozycję wynikającą z
n krotnego move-cmd do bufora wycinania; jeśli
move-cmd jest y, to cały wiersz zostaje
wycięty.
- Y
- wytnij od obecnej pozycji do końca wiersza.
- np
- wklej zawartość bufora wycinania tuż po
bieżącej pozycji, n krotnie.
- nP
- tak jak p, tylko że bufor zostaje wklejony na
bieżącej pozycji.
- Różne komendy
vi
- ^J i ^M
- bieżący wiersz zostaje wczytany, rozpoznany i wykonany przez
powłokę.
- ^L i ^R
- odrysuj bieżący wiersz.
- n.
- wykonaj ponownie ostatnią komendę edycji n razy.
- u
- odwróć ostatnią komendę edycji.
- U
- odwróć wszelkie zmiany dokonane w danym wierszu.
- intr i
quit
- znaki terminala przerwy i zakończenia powodują skasowania
bieżącego wiersza i wyświetlenie nowej
zachęty.