===================================================================== SHELL KORNA - NOTATKI (głównie pod systemy BSD) ===================================================================== Plik konfiguracyjny to .kshrc, jest ogólny systemowy w /etc, i każdy user ma własny w katalogu domowym. W OpenBSD w shellu Korna odniesienie do pliku konfiguracyjnego shella musi być umieszczone w .profile: User shell initialization files include: * ~/.profile: Executed by login shells * ~/.kshrc: Used for interactive ksh sessions (referenced in .profile) A minimal .profile: ------------------- export ENV="$HOME/.kshrc" export PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin" umask 022 Mój .profile: ------------- # $OpenBSD: dot.profile,v 1.8 2022/08/10 07:40:37 tb Exp $ # # sh/ksh initialization PATH=$HOME/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin ENV='$HOME/.kshrc' NNTPSERVER='news://news.icm.edu.pl' EDITOR='vim' PAGER='most' export PATH HOME ENV TERM NNTPSERVER EDITOR PAGER exec screen mój .kshrc ------------------------------------------------------- PS1="\u:\h \s \A \! \w \n \$ ""$PS2" set -o vi set -o csh-history alias ls='ls -F' alias h='fc -l | most' alias ll='ls -al' alias la='ls -a' alias l='ls -CF' alias cm='cmatrix' alias quit=exit alias cls=clear alias logout=exit alias bye=exit alias p='ps -l' alias j=jobs alias o='fg %-' alias df='df -k' alias du='du -k' HISTFILE=$HOME/.ksh_history HISTSIZE=2500 UWAGA do w/w!!! Jeżli shell Korna został ustawiony w trybie zgodności z shellem Bourna, to niektóre ustawienia Korna nie będą działać!!! Patrz man. Np. "\" w PS1 nie będą działać!!! Obliczenia arytmetyczne ((...)) również nie!!! Shell Korna może być ustawiony w trybie "native ksh", POSIX lub zgodności z shellem Bourna. Zależnie od tych ustawień mogą działać lub nie działać różne stałe/zmienne oraz polecenia wewnętrzne shella. Szczegóły man!!! Linia komend: ------------- Gdy edytorem linii jest emacs, łatwo można przeszukać historię: - pierwszy znak w linii # - zacząć pisać początek polecenie, zacznie przeszukiwać i dopasowywać z historii - gdy znajdzie polecenie które chcemy, wprowadzić nr polecenia z historii po TAB lub ENTER W .kshrc opcja "set -o vi" ustawia vi jako edytor linii shella, domyślnie jest emacs. Można też edycje linii zmienić z linii komend komendą set bez -o. Gdy edytorem linii jest vi, w trybie komend naciśnięcie "v" przenosi z trybu linii do "pełnego" edytora; zaraz wraca do linii komend i wykonuje wpisane polecenie. Przekierowanie wyj¿cia polecenia oraz ewentualnych błędow do pliku: cat * > nazwa_pliQ.txt 2> &1 PS1='$(printf "%(%H:%M:%S:)T" $' wyświetla aktualny czas przed znakiem zachęty, oblookać opcje zmiennej %T dla innych wariacji PS4='$LINENO' będzie numerował kolejne linie shell'a Znaki specjalne shella: #,$,*,-,!,?,0,1-9,@ (znaczenie patrz man ksh) Maskowanie nazw plików: ?,*,[...],[!...] *(cos1|cos2) +(cos1|cos2) ?(cos1|cos2) @(cos1|cos2) !(cos1|cos2) (jak w bash, szczegóły man) Ale! Inaczej jak w innych shellach, ksh nie podstawia "." i ".."!!! Procesy w tle (zarządzane jobs): $ jobs / jobs -l # wyświetla procesy pracujące w tle $ jobs %+ /jobs %% / jobs % # przełącza na ostatnio zastopowany proces $ jobs %n # przełącza na proces nr n $ jobs %string # przełącza na proces zaczynający się od string $ jobs %?string # przełącza na proces, w którym w jakimkolwiek m-cu jest "string" Przekierowania: --------------- > plik >| plik >> plik < plik <> plik (jak <, ale otwiera plik dla odczytu i zapisu!) << plik << znacznik << - znacznik <& fd (szczególny przypadek <& - ) >& fd Arytmetyka integer: ------------------- Prawie identyczna jak w bash, patrz man Stałe/zmienne: -------------- Zarezerwowane stałe shell'a patrz man Komenda env/printenv wyświetli ustawione stałe systemowe (ENV, MAIL, PAGER, EDITOR itp.) Ustawienie stałej/zmiennej: PAGER=most Wyświetlenie konkretnej stałej/zmiennej: $ echo $PAGER # na ekranie $ echo ${PAGER} # użycie w skryptach Skrypty: ======== (program) - uruchomienie programu w subshell'u { program; } - tym samym shell'u co skrypt (( matematyka )) - wykonanie obliczeń i zwrócenie wyniku [[ wyra¿enie ]] - odpowiednik "test" Cytowanie: - / wyłącza znaczenie pojedyńczego znaku zastrze¿onego - '' wszystko pomiędzy pom. apostrofem będzie traktowane jako zwykly txt - "" j/w ale $ `'" / są traktowane systemowo, dopiero // je wyłącza Modyfikacja w skryptach stałych/zmiennych: (na przykładzie w/w PAGER) ${PAGER:-most} # patrz man ksh ${PAGER:+most} # patrz man ksh ${PAGER:=most} # patrz man ksh ${PAGER:?most} # patrz man ksh $ echo ${#PAGER} # wyświetla dl/ilość-znaków zmiennej, dla most = 4 $ echo ${PAGER#mo} # wycina od początku podaną wartość, dla most = st $ echo ${PAGER##mo} # j/w, ale gdyby zamiast most bylo momost, to by wycięło 2*mo, można # użył dowolną ilość razy i będzie to wielokrotność $ echo ${PAGER%st} # wycina od końca podaną wartość, dla most = mo $ echo ${PAGER%%st} # j/w, patrz dla ## Dla zmiennych tablicowych wyświetla elementy tablicy: ${#nazwa_tablicy[*]} ${#nazwa_tablicy[@]} Funkcje: -------- $ unset -f nazwa_funkcji # kasacja funkcji $ typeset +f # wyświetlenie wszystkich funkcji $ typeset -f # wyświetlenie definicji funkcji $ typeset -fu # alias autoload Komendy wewnętrzne shella: -------------------------- Wbudowane komendy wewnętrzne shell do wykorzystania w skryptach wraz z kompletnymi opisami są w man'ie ksh. Sporo tego ;-)