Zsh (Magyar)
A Zsh egy nagy teljesítményű shell (parancssor), amely interaktív parancsértelmezőként és parancsfájlok értelmezőjeként is egyaránt működik. Bár kompatibilis a POSIX sh parancsorral (alapértelmezés szerint közvetlen nem kompatibilis vele, csak az emulate sh kiadásával kompatibilis), olyan előnyöket kínál, mint a továbbfejlesztett tabulátoros parancskiegészítés és a globbing. (Fordítói megjegyzés: A "globbing" a parancssorban azt jelenti, hogy Ön helyettesítő karakterekkel -wildcard karakterekkel- megtud adni fájlneveket vagy mintákat, amelyeket a shell automatikusan kibővít konkrét fájlokra. Például a *.txt minden .txt kiterjesztésű fájlt kijelöl egy könyvtárban.)
A Zsh GYIK további indokokat mutat be, amelyek mind a Zsh használata mellett szólnak más parancssorokkal szemben.
Telepítés
A kezdés előtt a felhasználók ellenőrizhetik, hogy jelenleg melyik parancsértelmezőt használják a számítógépükön:
$ echo $SHELL
Telepítse fel a számítógépre a zsh szoftvercsomagot. További parancskiegészítési definíciók megléte érdekében telepítse fel a számítógépre a zsh-completions szoftvercsomagot is.
Kezdeti beállítás
A következő parancs parancssorban történő lefuttatása által Ön meggyőződhet arról, hogy a Zsh megfelelően fel lett telepítve a számítógépre:
$ zsh
Ekkor meg kell jelennie a zsh-newuser-install programnak, amely végigvezeti Önt néhány alapvető beállításon. Ha ezt a végigvezetést ki szeretné hagyni, akkor nyomja meg a q billentyűgombot. Ha nem jelent meg, akkor manuális úton, kézzel is elindíthatja a következő parancs futtatása által:
$ autoload -Uz zsh-newuser-install $ zsh-newuser-install -f
Zsh beállítása alapértelmezett parancssorként
Módosítsa az Ön parancssorát a /usr/bin/zsh értékre. Részletekért tekintse meg a Command-line shell#Alapértelmezett parancssor módosítása című leírást.
/.bashrc fájlból a /.zshrc fájlba (pl. a promptot és az aliaszokat), valamint a /.bash_profile fájlból a /.zprofile fájlba (pl. az X Window System indítását végző kódot).Indításfájlok / leállításfájlok
- Ha a
$ZDOTDIRnincs beállítva, akkor helyette a$HOMElesz használva. - Ha az
RCSbeállítás bármelyik fájlban nincs beállítva, akkor az adott fájl után a rendszer nem olvas be további beállításfájlokat. - Ha a
GLOBAL_RCSbeállítás bármelyik fájlban nincs beállítva, akkor az adott fájl után a rendszer nem olvas be további globális beállításfájlokat (/etc/zsh/*).
Indításkor a Zsh alapértelmezés szerint a következő fájlokból olvassa be a parancsokat a megadott sorrendben, feltéve, hogy azok léteznek.
-
/etc/zsh/zshenv— Az összes felhasználó környezeti változóinak a beállítására szolgál. Ez a fájl nem tartalmazhat olyan parancsokat, amelyek kimenetet állítanak elő, vagy feltételezik, hogy a parancsértelmező TTY-hez van csatlakoztatva. Ha ez a fájl létezik, akkor mindig beolvasásra kerül, és ez a viselkedés nem írható felül. -
$ZDOTDIR/.zshenv— A felhasználó környezeti változóinak beállítására szolgál. Nem tartalmazhat olyan parancsokat, amelyek kimenetet állítanak elő, vagy azt feltételezik, hogy a parancsértelmező TTY-hez van csatlakoztatva. Ha ez a fájl létezik,akkor mindig beolvasásra kerül. -
/etc/zsh/zprofile— Az összes felhasználó számára induláskor végrehajtandó parancsokhoz használatos. Login shell -ként történő indításkor kerül beolvasásra. Felhívjuk az Ön figyelmét, hogy Arch Linuxon alapértelmezés szerint egy sort tartalmaz, amely betölti a/etc/profilefájlt. Mielőtt Ön el szeretné távolítani ezt a sort, olvassa el az alábbi figyelmeztetést!-
/etc/profile— Ezt a fájlt minden POSIX sh-kompatibilis parancsértelmezőnek be kell töltenie bejelentkezéskor: Beállítja a$PATHváltozót, valamint egyéb környezeti változókat és alkalmazásspecifikus (/etc/profile.d/*.sh) beállításokat a bejelentkezés során.
-
-
$ZDOTDIR/.zprofile— A felhasználó induláskor végrehajtandó parancsaihoz használatos. Login shell -ként történő indításkor kerül beolvasásra. Jellemzően grafikus munkamenetek automatikus indítására és a munkamenetre kiterjedő környezeti változók beállítására használják. -
/etc/zsh/zshrc— Az összes felhasználó számára az interaktív parancsértelmező beállítására és parancsok végrehajtására szolgál. Interaktív shell -ként történő indításkor kerül beolvasásra. -
$ZDOTDIR/.zshrc— A felhasználó interaktív parancsértelmezőjének beállítására és parancsok végrehajtására szolgál. Interaktív shell -ként történő indításkor kerül beolvasásra. -
/etc/zsh/zlogin— Az összes felhasználó számára az indulási folyamat befejezésekor végrehajtandó parancsokhoz használatos. Login shell -ként történő indításkor kerül beolvasásra. -
$ZDOTDIR/.zlogin— A felhasználó számára az indulási folyamat befejezésekor végrehajtandó parancsokhoz használatos. Login shell -ként történő indításkor kerül beolvasásra. Jellemzően parancssori segédprogramok automatikus indítására használják. Nem szabad grafikus munkamenetek automatikus indítására használni, mivel ebben a szakaszban a munkamenet olyan beállítást tartalmazhat, amely kizárólag interaktív parancsértelmezőhöz készült. -
$ZDOTDIR/.zlogout— A parancsok végrehajtására szolgál, amikor egy login shell kilép. -
/etc/zsh/zlogout— Az összes felhasználó számára a parancsok végrehajtására szolgál, amikor egy logins shell kilép.
Tekintse meg a grafikus reprezentációt.
$HOME/.profile nem része a Zsh indulási fájljainak, és a Zsh nem tölti be, kivéve amikor a Zsh sh vagy ksh módban van meghívva, és logins shell -ként indul. Az sh és ksh kompatibilitási módokról további részletekért tekintse meg a zsh(1) § COMPATIBILITY man súgót./etc/zsh/zprofile fájlból, mert ez megsérti a más szoftvercsomagok integritását, amelyek a /etc/profile.d/ könyvtárban biztosítanak bizonyos szkripteket.Zsh beállítása
Bár a Zsh azonnal használható, mégis szinte biztos, hogy nincs úgy beállítva, ahogyan a legtöbb felhasználó használni szeretné. A Zsh-ban elérhető testreszabási lehetőségek hatalmas mennyisége miatt azonban a Zsh beállítása ijesztő és időigényes feladat lehet. Az automatikus beállítás érdekében tekintse meg a #Harmadik féltől származó bővítmények című bekezdést.
Egyszerű .zshrc
Alább egy mintául szolgáló beállításfájl található. Megfelelő alapértelmezett beállításokat biztosít, emellett számos példát is ad arra, hogy a Zsh parancssor milyen módokon szabható testre. A beállítás használata érdekében mentse el a fájlt .zshrc nevű fájlként.
source ~/.zshrc futtatásával alkalmazza a módosításokat kijelentkezés és újbóli bejelentkezés nélkül.Íme egy egyszerű .zshrc:
~/.zshrc
autoload -Uz compinit promptinit compinit promptinit # Ez a walters témát állítja be alapértelmezett parancssorként. prompt walters
A parancssortéma-rendszerrel kapcsolatos további részletekért tekintse meg a #Parancssortémák című bekezdést.
$PATH beállítása
A Zsh a PATH változót a path tömbhöz köti. Ez lehetővé teszi, hogy a PATH változót egyszerűen a path tömb módosításával kezelje. A részletekért tekintse meg a Z-Shell felhasználói útmutatóját.
A ~/.local/bin/ könyvtár PATH változóhoz történő hozzáadása érdekében:
~/.zshenv
typeset -U path PATH path=(~/.local/bin $path) export PATH
Parancskiegészítés
A Zsh talán legmeggyőzőbb szolgáltatása a begépelés közbeni, fejlett, automatikus parancskiegészítési képessége. Ön a .zshrc fájlban engedélyezze legalább az begépelés közbeni automatikus parancskiegészítést. A begépelés közbeni automatikus parancskiegészítés engedélyezése érdekében adja hozzá a következőket a ~/.zshrc fájlhoz:
~/.zshrc
autoload -Uz compinit compinit
A fenti beállítás tartalmazza az ssh/scp/sftp számítógépnevek automatikus begépelés közbeni parancskiegészítését, azonban ahhoz, hogy ez a funkció működjön, a felhasználóknak nem szabad engedélyezniük az ssh számítógépnév elhashelését (vagyis az ssh kliensprogramok beállításaiban nem szabad engedélyezni a HashKnownHosts beállítást).
Adja hozzá a következő sorokat annak érdekében, hogy nyílbillentyűkkel vezérelni lehessen majd a begépelés közbeni automatikus parancskiegészítést:
~/.zshrc
zstyle ':completion:*' menu select
A menü aktiválása érdekében nyomja meg kétszer a Tab billentyűgombot.
(Például amikor Ön egy sudo paranccsal kezdődő parancs begépelését egészíti ki, akkor a begépelést kiegészítő szkriptek a lehetséges parancsnak a kiegészítéseit szintén sudo jogosultsággal próbálják meghatározni). A megemelt jogosultsági szintet igénylő parancsok begépelés közbeni automatikus parancskiegészítésének engedélyezése érdekében, vegye fel a következőt:
~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Egyedi parancskiegészítés
Ön saját egyedi parancskiegészítéseket is létrehozhat. Ha ezt szeretné tenni, akkor nézze meg a zshcompsys(1) man súgót.
Vegye figyelembe, hogy a hivatalos dokumentáció nehezen olvasható. Ön fontolóra veheti az egyszerűbb zsh-completion-howto oktatóanyag kipróbálását a könnyebb elkezdés érdekében.
Billentyű-hozzárendelések
A Zsh nem használja a readline programozói függvénykönyvtárat. Ehelyett, a saját és erősebb beépített parancssorszerkesztőjét (úgynevezett Zsh Line Editor, ZLE) használja. Nem olvassa a /etc/inputrc vagy ~/.inputrc fájlokat. Kérjük Önt, hogy olvassa el az A closer look at the zsh line editor and creating custom widgets című leírást annak érdekében, hogy elkezdje megérteni a ZLE beállítását.
A ZLE rendelkezik egy Emacs móddal és egy vi móddal. Ha a VISUAL vagy az EDITOR környezeti változó tartalmazza a vi karakterláncot, akkor a vi mód lesz használva. Máskülönben, alapértelmezés szerint Emacs mód lesz használatban. A módot kifejezetten a bindkey -e vagy bindkey -v paranccsal lehet beállítani Emacs módra vagy vi módra. A vi módban az Esc billentyű megnyomásának késleltetése alapértelmezetten 0.4s, és ez beállítható rövidebbre (0.05s) az export KEYTIMEOUT=5 segítségével.
A billentyűkiosztások úgy vannak hozzárendelve, hogy egy billentyűleütésnek megfelelő escape szekvencia egy ZLE widgethez legyen leképezve. Az elérhető widgetek, a műveleteik leírásával és alapértelmezett billentyűkiosztásaikkal együtt, a zshzle(1) § STANDARD WIDGETS és a zshcontrib(1) § ZLE FUNCTIONS man súgókban vannak felsorolva.
Az ajánlott módja a billentyű-hozzárendelés beállításának a Zsh parancssorban a terminfo(5) karakterlánc-képességeinek használata. Például[1][2]:
~/.zshrc
# create a zkbd compatible hash;
# to add other keys to this hash, see: man 5 terminfo
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
key[Insert]="${terminfo[kich1]}"
key[Backspace]="${terminfo[kbs]}"
key[Delete]="${terminfo[kdch1]}"
key[Up]="${terminfo[kcuu1]}"
key[Down]="${terminfo[kcud1]}"
key[Left]="${terminfo[kcub1]}"
key[Right]="${terminfo[kcuf1]}"
key[PageUp]="${terminfo[kpp]}"
key[PageDown]="${terminfo[knp]}"
key[Shift-Tab]="${terminfo[kcbt]}"
# Billentyűgombok beállítása
[[ -n "${key[Home]}" ]] && bindkey -- "${key[Home]}" beginning-of-line
[[ -n "${key[End]}" ]] && bindkey -- "${key[End]}" end-of-line
[[ -n "${key[Insert]}" ]] && bindkey -- "${key[Insert]}" overwrite-mode
[[ -n "${key[Backspace]}" ]] && bindkey -- "${key[Backspace]}" backward-delete-char
[[ -n "${key[Delete]}" ]] && bindkey -- "${key[Delete]}" delete-char
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-history
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-history
[[ -n "${key[Left]}" ]] && bindkey -- "${key[Left]}" backward-char
[[ -n "${key[Right]}" ]] && bindkey -- "${key[Right]}" forward-char
[[ -n "${key[PageUp]}" ]] && bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history
[[ -n "${key[PageDown]}" ]] && bindkey -- "${key[PageDown]}" end-of-buffer-or-history
[[ -n "${key[Shift-Tab]}" ]] && bindkey -- "${key[Shift-Tab]}" reverse-menu-complete
# Végül, győződjön meg arról, hogy amikor a zle aktív, olyankor a parancssor alkalmazás módban van.
# Kizárólag akkor érvényesek a $terminfo értékei.
if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then
autoload -Uz add-zle-hook-widget
function zle_application_mode_start { echoti smkx }
function zle_application_mode_stop { echoti rmkx }
add-zle-hook-widget -Uz zle-line-init zle_application_mode_start
add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop
fi
Shift, Alt, Ctrl és Meta módosítók
Az xterm-kompatibilis parancssorok használhatják a(z) user_caps(5) kiterjesztett billentyűdefinícióit. Ezek a Shift, Alt, Ctrl és Meta kombinációi a Up, Down, Left, Right, PageUp, PageDown, Home, End vagy Del billentyűkkel. A módosítóbillentyűk és billentyűkombinációk ajánlott neveinek megtekintése érdekében tekintse meg a zkbd source forráskódját.
Például a Ctrl+Left a kurzort az előző szó elejére mozgatja, míg a Ctrl+Right a következő szó elejére mozgatja a kurzort:
~/.zshrc
key[Control-Left]="${terminfo[kLFT5]}"
key[Control-Right]="${terminfo[kRIT5]}"
[[ -n "${key[Control-Left]}" ]] && bindkey -- "${key[Control-Left]}" backward-word
[[ -n "${key[Control-Right]}" ]] && bindkey -- "${key[Control-Right]}" forward-word
Parancskiadások története
Annak érdekében, hogy a parancskiadások történetlistája figyelmen kívül hagyja a szóközzel kezdődő parancsokat, adja ki a setopt HIST_IGNORE parancsot, akár a parancssorban, akár a .zshrc fájlban. Habár, amíg egy másik parancs nem veszi át az utolsó parancs helyét, addig a setopt HIST_IGNORE beállítás mellett is az utolsó parancs megismételhető (például a Fel nyílbillentyű lenyomásával). Az unsetopt OPT használható egy setopt OPT parancs visszavonására.
Alapértelmezés szerint a parancskiadás történetének mérete a HISTSIZE értékkel 30 lesz (minden parancssorhoz külön, a lista bejegyzéseinek törlésének lehetősége nélkül) és nem kerül mentésre munkamenetek között. A HISTFILE beállítás egyik következménye, hogy a történetlista mentésre kerül munkamenetek között.
Keresés a parancskiadások előzményében
Önnek be kell állítania a key tömböt, és meg kell győződnie arról, hogy a ZLE alkalmazás módba lép a következő utasítások használatához. Tekintse meg a #Billentyű-hozzárendelések című bekezdést.
Annak érdekében, hogy engedélyezve legyen a parancskiadások előzményeiben való keresés, adja hozzá ezeket a sorokat a .zshrc fájlhoz:
~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-search
zle -N up-line-or-beginning-search
zle -N down-line-or-beginning-search
[[ -n "${key[Up]}" ]] && bindkey -- "${key[Up]}" up-line-or-beginning-search
[[ -n "${key[Down]}" ]] && bindkey -- "${key[Down]}" down-line-or-beginning-search
Ennek elvégzésével csak a jelenlegi sor aktuális kurzorig terjedő részével egyező korábbi parancsok jelennek meg, amikor a Fel vagy Le billentyűket lenyomja.
Parancssorok
A Zsh lehetőséget kínál parancssortémák használatára. Továbbá, a témákkal elégedetlen (vagy a hasznosságukat bővíteni kívánó) felhasználók számára is lehetőséget kínál egyéni parancssor elkészítésére.
Parancssortémák
A Zsh parancssorban a parancssortémák gyors és egyszerű módot biztosítanak a színes parancssor beállítására. A parancssortémákkal kapcsolatos információkért, valamint a saját téma készítésének a módjáért tekintese meg a zshcontrib(1) § PROMPT THEMES man súgót.
Egy téma használatakor győződjön meg arról, hogy a parancssortéma-rendszer automatikus úton történő betöltése be van állítva a .zshrc fájlban. Ezt a következő sorok hozzáadásával teheti meg:
~/.zshrc
autoload -Uz promptinit promptinit
Az elérhető parancssortémák kilistázása értekében futtassa a következő parancsot:
$ prompt -l
Például a walters téma használata érdekében írja be a parancssorba a következőt:
$ prompt walters
Az összes elérhető téma előnézetének megjelenítése érdekében futtassa a következő parancsot:
$ prompt -p
Parancssortémák kézi úton történő feltelepítése
A Zsh parancssor témáit manuális úton, tehát kézzel, mindenféle külső beállításkezelő segédprogram nélkül is fel lehet telepíteni a számítógépre. Helyi számítógépre történő feltelepítés érdekében először hozzon létre egy könyvtárat, és adja hozzá a fpath tömbhöz. Például:
$ mkdir ~/.zprompts
$ fpath=("$HOME/.zprompts" "$fpath[@]")
Most hozzon létre egy szimbolikus linket a témafájlra ebben a könyvtárban:
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup
Ha ehelyett a témát globálisan szeretné telepíteni, akkor tegye a következőt:
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup
Most már Önnek tudnia kell aktiválnia a témát a következő parancs futtatásával:
$ prompt mytheme
Ha minden megfelelően működik, akkor Ön ennek megfelelően szerkesztheti a .zshrc fájlt.
Parancssortémák hozzáadása külön fájl nélkül mindegyikhez
A parancssortéma saját fájlon keresztüli hozzáadása mellett lehetőség van arra, hogy egy másik fájlból (például az Ön .zshrc fájljából) legyenek a témák hozzáadva a parancssorhoz. Például:
~/.zshrc
# Load promptinit
autoload -Uz promptinit && promptinit
# Define the theme
prompt_mytheme_setup() {
PS1="%~%# "
}
# Add the theme to promptsys
prompt_themes+=( mytheme )
# Load the theme
prompt mytheme
Személyre szabott prompt
Az elsődleges bal oldali prompton PS1 (PROMPT, prompt) túl, amely minden shell parancssornál közös, a Zsh parancssor támogatja a jobb oldali promptot RPS1 (RPROMPT) is. Ezt a két változót Önnek érdemes egyéni értékre beállítania.
Egyéb speciális célú promptok, mint például a PS2 (PROMPT2), PS3 (PROMPT3), PS4 (PROMPT4), RPS1 (RPROMPT), RPS2 (RPROMPT2) és a SPROMPT, a zshparam(1) § PARAMETERS USED BY THE SHELL című man súgórészben vannak ismertetve.
Az escape-ek segítségével minden prompt testre szabható. A létező prompt escape-ek listája a zshmisc(1) § EXPANSION OF PROMPT SEQUENCES című man súgórészben található.
Színek
A Zsh parancssor másképp állítja be a színeket, mint a Bash parancssor. Önnek nincs szüksége arra, hogy bőséges ANSI escape szekvenciákat vagy a terminfo(5) parancssorképességeit használja. A Zsh kényelmes prompt escape-eket biztosít az előtérszín, a háttérszín és más vizuális hatások beállításához. Tekintse meg a zshmisc(1) § Visual effects című man súgóleírást a Zsh prompt escape-ek listájáért és az escape-ek leírásaiért.
A színeket meg lehet adni egy decimális egész szám formájában, a nyolc legszélesebb körben támogatott szín egyikének nevével, vagy a # (kettős kereszt) karakterrel kezdődő, hexadecimális formátumú RGB színhármas formájában. További részletekért tekintse meg a fg=colour leírását a zshzle(1) § CHARACTER HIGHLIGHTING man súgórészben.
A legtöbb parancssor a következő színeket támogatja név szerint:
| Név | Szám |
|---|---|
black |
0
|
red |
1
|
green |
2
|
yellow |
3
|
blue |
4
|
magenta |
5
|
cyan |
6
|
white |
7
|
Az xterm 256 színt támogató parancssorokhoz tartozó 0 és 255 közötti színszámok megtalálhatók az xterm-256color táblázatban.
Megfelelően beállított TERM környezeti változó esetén a parancssor által támogatott maximális színszám a terminfo(5) adatbázisból kérdezhető le az echoti colors parancs segítségével. A 24 bites színek esetében ellenőrizze a COLORTERM környezeti változót is a print $COLORTERM parancs segítségével. Ha ez 24bit vagy truecolor értéket ad vissza, akkor a parancssor 16777216 (224) színt támogat, még akkor is, amikor a terminfo kisebb számot jelenít meg.
- A 0–15 közötti színek eltérhetnek a különböző parancssorok és az általuk használt színsémák között.
- Sok parancssor a félkövér megjelenítést világosabb szín formájában jeleníti meg.
- A prompt escape-ek a
print -P "prompt escapes"paranccsal tesztelhetők. Például:$ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b' - Amennyiben Ön 24 bites színeket használ, akkor érdemes lehet betölteni a
zsh/nearcolormodult olyan parancssorokban, amelyek nem támogatják ezeket. Például:[[ "$COLORTERM" == (24bit|truecolor) || "${terminfo[colors]}" -eq '16777216' ]] || zmodload zsh/nearcolorTekintse meg a zshmodules(1) § THE ZSH/NEARCOLOR MODULE című man súgórészt azsh/nearcolormodul részleteiért.
Példa
Példa egy nagyon egyszerű, nem kiszínezett promptra:
PROMPT='%n@%m %~ %# '
Ahogyan meg fog jelenni:
Ez egy példa egy kétoldalú, színes prompt-ra:
PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# '
RPROMPT='[%F{yellow}%?%f]'
A következőképpen fog megjelenni:
A 16-255 tartományba tartozó színek és a 24 bites valódi szín használatához Ön használhatja a kívánt színhez rendelt 0 és 255 közötti számokat, illetve annak hexadecimális színkódját:
PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# '
RPROMPT='[%F{3}%?%f]'
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# '
RPROMPT='[%F{#0000ff}%?%f]'
Mintául szolgáló .zshrc fájlok
- Annak érdekében, hogy Ön pontosan ugyanazt a beállítást kapja, mint a havi ISO kiadások (amelyek alapértelmezetten Zsh parancssort használnak), telepítse fel a számítógépre a grml-zsh-config szoftvercsomagot. Ez tartalmazza a grml számos finomhangolását és fejlett optimalizációját.
- https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – Alapbeállítás, dinamikus prompttal és ablakcím/hardinfo funkcióval.
További információkért tekintse meg a dotfiles#User repositories című leírást.
Tippek és trükkök
X automatikus elindítása bejelentkezéskor
Tekintse meg az xinit#X automatikus indítása bejelentkezéskor című leírást.
Parancssor beállításainak visszaállítása egy program rendellenes kilépése után
Számos program módosítja a parancssor állapotát, és gyakran nem állítja vissza a parancssor beállításait a rendellenes kilépéskor. (Például összeomlás vagy SIGINT jel fogadása esetén szokott ez megtörténni).
Ez a probléma általában a reset(1) végrehajtásával orvosolható:
$ reset
A következő szakaszok olyan módszereket ismertetnek, amelyekkel elkerülhető a parancssor manuális, tehát, kézi úton történő visszaállításának a szükségessége.
A ttyctl parancs
A ttyctl parancs használható a parancssor "befagyasztására/felengedésére". Az interaktív parancsértelmező indításkori befagyasztása érdekében használja a következőt:
~/.zshrc
ttyctl -f
Parancssor visszaállítása escape szekvenciákkal
Az alternatív vonalrajzoló karakterkészlet összezavarhatja a parancssort oly módon, amelyet a ttyctl nem tud megakadályozni.
Egyszerű megoldás, hogy a parancssort alaphelyzetbe állító escape-szekvenciákat a precmd hook függvényből írja ki, így azok minden alkalommal lefutnak, mielőtt a parancssor megjelenik. Például az escape-szekvencia \e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8 használatával:
~/.zshrc
autoload -Uz add-zsh-hook
function reset_broken_terminal () {
printf '%b' '\e[0m\e(B\e)0\017\e[?5l\e7\e[0;0r\e8'
}
add-zsh-hook -Uz precmd reset_broken_terminal
A működés tesztelése érdekében futtassa a következő parancsot:
$ print '\e(0\e)B'
Legutóbb meglátogatott könyvtárak megjegyzése
Dirstack
A Zsh parancssor beállítható úgy, hogy megjegyezze a DIRSTACKSIZE számú utoljára meglátogatott könyvtárakat. Ezeket a könyvtárakat ezután nagyon gyorsan el lehet érni a cd parancs segítségével. Önnek a saját beállításfájljához csak néhány sort kell hozzáadnia:
~/.zshrc
autoload -Uz add-zsh-hook
DIRSTACKFILE="${XDG_CACHE_HOME:-$HOME/.cache}/zsh/dirs"
if [[ -f "$DIRSTACKFILE" ]] && (( ${#dirstack} == 0 )); then
dirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")
[[ -d "${dirstack[1]}" ]] && cd -- "${dirstack[1]}"
fi
chpwd_dirstack() {
print -l -- "$PWD" "${(u)dirstack[@]}" > "$DIRSTACKFILE"
}
add-zsh-hook -Uz chpwd chpwd_dirstack
DIRSTACKSIZE='20'
setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME
## Remove duplicate entries
setopt PUSHD_IGNORE_DUPS
## This reverts the +/- operators.
setopt PUSHD_MINUS
Ezután, használja a következő parancsot:
$ dirs -v
Így a fenti parancs hatására kiíródik a dirstack. Használja a cd -<NUM> parancsot egy korábban meglátogatott könyvtárba való visszalépéshez. Használja az automatikus kiegészítést a kötőjel után. Ez nagyon hasznosnak bizonyul, amikor Ön az automatikus kiegészítési menüt használja.
- Ez a funkció nem fog működni, amikor egynél több zsh munkamenet van megnyitva, és Ön megpróbál
cdparancsot használni, mivel mindkét munkamenet ugyanabba a fájlba ír, ami ütközést okoz. - Előfordulhat, hogy Önnek létre kell hoznia a
$HOME/.cache/zshkönyvtárat azért, hogy elkerülje ano such file or directoryhibát.
cdr
A cdr lehetővé teszi azt, hogy egy automatikusan karbantartott listából Ön a munkakönyvtárat egy korábbi munkakönyvtárra változtassa. Minden bejegyzést olyan fájlokban tárol, amelyek munkamenetek között, valamint (alapértelmezés szerint) az aktuális munkamenetben a parancssorok között is megőrzésre kerülnek.
Tekintse meg a zshcontrib(1) § REMEMBERING RECENT DIRECTORIES man súgórészt a beállítási utasításokért.
zoxide
A zoxide egy okosabb cd parancs, amely lehetővé teszi, hogy Ön néhány billentyűleütéssel bárhová képes legyen elnavigálni. Emlékszik az Ön által gyakran használt könyvtárakra, és egy pontozási mechanizmust használ annak kitalálása érdekében, hogy Ön hová szeretne eljutni.
További részletekért tekintse meg ezt a leírást vagy a zoxide(1) man súgót.
A help parancs
A Bash rendszerrel ellentétben a Zsh nem engedélyezi a beépített help parancsot. Helyette létezik a run-help parancs. Alapértelmezés szerint a run-help a man parancs úgynevezett "alias" parancsa: Végrehajtható manuálian úgy, hogy egy parancs elé Ön beírja, vagy az éppen begépelt parancshoz a Alt+h vagy Esc h billentyűparancsokkal meghívja.
Mivel a run-help alapértelmezés szerint csupán a man úgynevezett "alias" parancsa, ezért csak külső parancsokkal működik. A működésének javítása érdekében, azért, hogy a parancssor beépített parancsaival és egyéb parancssori funkciókkal is működjön, Önnek a run-help függvényt kell használnia. Tekintse meg a zshcontrib(1) man súgót a további információkért a run-help függvénnyel kapcsolatban és a run-help segédfüggvényeivel kapcsolatban.
Először, töltse be a run-help függvényt, majd távolítsa el a meglévő run-help alias parancsot. A kényelem érdekében a help "alias" parancsként a run-help parancshoz rendelhető hozzá. Például adja hozzá a következőket a zshrc fájlhoz:
autoload -Uz run-help
(( ${+aliases[run-help]} )) && unalias run-help
alias help=run-help
Az assistant-funkciókat külön kell engedélyezni:
autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn
Például, a run-help git commit parancs mostantól a git-commit(1) man súgót nyitja meg a git(1) helyett.
Állandó újrahashelés
Általában a zshcompsys(1) § Use of compinit man dokumentációban szereplő compinit nem találja meg automatikusan a $PATH változóban található új végrehajtható fájlokat. Például egy új szoftvercsomag feltelepítése után a /usr/bin/ könyvtárban található fájlok nem kerülnek bele azonnal az automatikus kiegészítésbe. Ezért, annak érdekében, hogy ezek az új végrehajtható fájlok bekerüljenek az automatikus kiegészítésbe, Önnek a következő parancsot kell lefuttatnia:
$ rehash
Ez az újrahashelés (rehash) beállítható úgy, hogy automatikusan lefusson.[3] Egyszerűen vegye fel a következőt az Ön zshrc fájljába:
~/.zshrc
zstyle ':completion:*' rehash true
Igény szerinti újrahashelés
A fentiekhez hasonlóan (de a pacman automatikus műveletindítói segítségével) azt is meg lehet csinálni, hogy Ön automatikusan rehash kérést indítson, amely nem jár a folyamatos újrahashelés fent említett teljesítménybeli hátrányával. Ennek engedélyezése érdekében Ön hozza létre a /etc/pacman.d/hooks könyvtárat, valamint a /var/cache/zsh könyvtárat, majd hozzon létre egy automatikus műveletindító fájlt (angolul úgynevezett "hook" fájlt):
/etc/pacman.d/hooks/zsh-rehash.hook
[Trigger] Operation = Install Operation = Upgrade Operation = Remove Type = Path Target = usr/bin/* [Action] Description=Rehash executables Depends = zsh When = PostTransaction Exec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman
Ez biztosítja, hogy a /var/cache/zsh/pacman fájl módosítási dátuma összhangban maradjon azzal az időponttal, amikor egy szoftvercsomag utoljára telepítve, frissítve vagy eltávolítva lett. Ezután a zsh parancssort rá kell venni arra, hogy újrahashelje a saját parancsgyorsítótárát, amikor az elavulttá válik. Ennek érdekében adja hozzá az Ön ~/.zshrc fájljához a következőt:
~/.zshrc
zshcache_time="$(date +%s%N)"
autoload -Uz add-zsh-hook
rehash_precmd() {
if [[ -a /var/cache/zsh/pacman ]]; then
local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)"
if (( zshcache_time < paccache_time )); then
rehash
zshcache_time="$paccache_time"
fi
fi
}
add-zsh-hook -Uz precmd rehash_precmd
Ha a precmd automatikus műveletindító (úgynevezett "hook") a /var/cache/zsh/pacman frissítése előtt aktiválódik, akkor az automatikus kiegészítés nem feltétlenül fog működni addig, amíg egy új parancssor nem indul el. Egy üres parancs lefuttatása (például a Enter billentyű megnyomása) elegendő kell, hogy legyen.
Alternatív, igény szerinti újrahashelés a SIGUSR1 használatával
A fentiekhez hasonlóan, az automatikus műveletindító fájl ("hook" fájl) a következőképpen néz ki:
/etc/pacman.d/hooks/zsh-rehash.hook
[Trigger] Operation = Install Operation = Upgrade Operation = Remove Type = Path Target = usr/bin/* [Action] Description=Rehash executables Depends = zsh Depends = procps-ng When = PostTransaction Exec = /usr/bin/pkill zsh --signal=USR1
zsh parancssorpéldánynak. Vegye figyelembe, hogy a SIGUSR1 alapértelmezett viselkedése a megszakítás, ezért amikor Ön ezt először beállítja, akkor az összes felhasználó összes futó zsh példánya (beleértve a bejelentkezési parancssorokat is) le fog állni, amennyiben a felhasználók nem töltötték be az alábbi trap beállítást.~/.zshrc
TRAPUSR1() { rehash }
A fenti function trap helyettesíthető egy list trap formával: trap 'rehash' USR1. A különböző trap típusok közötti eltérésekkel kapcsolatban tekintse meg a zshmisc(1) § Trap Functions súgóleírást.
Ez a módszer azonnal újraindexeli (rehash) az összes zsh példányt, így nincs szükség az Enter billentyűgomb lenyomására a precmd aktiválása érdekében.
Egy ncurses alkalmazás billentyűhöz történő hozzárendelése
Rendeljen egy ncurses alkalmazást egy billentyűleütéshez, mindezt úgy, hogy az nem fogja elfogadni a felhasználói bevitelt. A működéshez használja a BUFFER változót. Az alábbi példa lehetővé teszi a felhasználók számára, hogy az ncmpcpp alkalmazást megnyithassák az Alt+ billentyűkombinációval:
~/.zshrc
ncmpcppShow() {
BUFFER="ncmpcpp"
zle accept-line
}
zle -N ncmpcppShow
bindkey '^[\' ncmpcppShow
Egy alternatív módszer, amely megőrzi mindazt, amit Ön az alkalmazás meghívása előtt a parancssorba beírt:
~/.zshrc
ncmpcppShow() {
ncmpcpp <$TTY
zle redisplay
}
zle -N ncmpcppShow
bindkey '^[\' ncmpcppShow
Billentyűparancsok a fájlkezelőhöz
Általában elmondható, hogy a grafikus felhasználói felülettel rendelkező fájlkezelőkben használthoz billentyűparancsok hasznosak szoktak lenni. Ugyanígy, a parancssorban is hasznosak lehetnek a ilyen "fájlkezelős" jellegű billentyűparancsok. Az első ilyen parancs visszalép egyet a könyvtárelőzményekben (Alt+Left), a második parancs lehetővé teszi, hogy a felhasználó a szülőkönyvtárba lépjen (Alt+Up). Mindkettő parancs megjeleníti a könyvtár tartalmát is.
~/.zshrc
cdUndoKey() {
popd
zle reset-prompt
print
ls
zle reset-prompt
}
cdParentKey() {
pushd ..
zle reset-prompt
print
ls
zle reset-prompt
}
zle -N cdParentKey
zle -N cdUndoKey
bindkey '^[[1;3A' cdParentKey
bindkey '^[[1;3D' cdUndoKey
Az xterm címsora
Ha az Ön parancssora támogatja, akkor a parancssor címsorát beállíthatja a Zsh parancssorból. Ez lehetővé teszi a cím dinamikus módosítását annak érdekében, hogy Ön ezáltal a parancssor állapotával kapcsolatos releváns információkat jelenítsen meg. Például megjeleníthető ezáltal a Ön saját felhasználóneve és az Ön aktuális könyvtára, vagy az éppen végrehajtás alatt álló parancs is megjeleníthető.
Az xterm címe az xterm vezérlősorozat operációs rendszer parancsával, a \e]2;\a vagy a \e]2;\e\ használatával állítható be. Például:
$ print -n '\e]2;Az én xterm címsorom\a'
A fenti parancs a következő parancssorcímet állítja be:
Az én xterm címsorom
A dinamikus cím beállításának egyszerű módja a cím beállítása a precmd és preexec automatikus műveletindító függvényekben (angolul hook függvényekben). Az elérhető automatikus műveletindító függvények listáját és leírásukat Ön megtekintheti a zshmisc(1) § Hook Functions man súgóban.
A print -P használatával emellett a Zsh prompt escape szekvenciáinak előnyeit is kihasználhatja.
- A cím kiírása több parancsra is felbontható, amennyiben azok egymást közvetlenül követik.
- A GNU Screen az xterm címét a hardstatus mezőnek küldi (
%h). Ha Ön a Screen karakterlánc escape szekvenciáit szeretné használni (például színekhez), akkor a hardstatus mezőt Önnek a\e_\e\\escape szekvenciával kell beállítania. Ellenkező esetben amikor karakterlánc escape szekvenciákat használ a\e]2;\aszekvenciában, akkor a parancssor hibás címet fog megjeleníteni, mivel nem képes értelmezni a Screen karakterlánc escape szekvenciáit.
- Ne használja a
-Pkapcsolót aprintparancsnál a változók kiírásakor, annak érdekében, hogy elkerülje azok prompt escape szekvenciákként történő értelmezését. - Használja a
qparaméterkifejtési jelölőzászlót a változók kiírásakor, annak érdekében, hogy megakadályozza azok escape szekvenciákként történő értelmezését.
~/.zshrc
autoload -Uz add-zsh-hook
function xterm_title_precmd () {
print -Pn -- '\e]2;%n@%m %~\a'
[[ "$TERM" == 'screen'* ]] && print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-}\e\\'
}
function xterm_title_preexec () {
print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"
[[ "$TERM" == 'screen'* ]] && { print -Pn -- '\e_\005{2}%n\005{-}@\005{5}%m\005{-} \005{+b 4}%~\005{-} %# ' && print -n -- "${(q)1}\e\\"; }
}
if [[ "$TERM" == (Eterm*|alacritty*|aterm*|foot*|gnome*|konsole*|kterm*|putty*|rxvt*|screen*|wezterm*|tmux*|xterm*) ]]; then
add-zsh-hook -Uz precmd xterm_title_precmd
add-zsh-hook -Uz preexec xterm_title_preexec
fi
Parancssor lapjának a címe
Egyes parancssorok és parancssor-multiplexerek támogatják a lap címének a beállítását. Az escape szekvenciák a parancssortól függnek:
| Parancssor | Escape szekvenciák | Leírás |
|---|---|---|
| GNU Screen |
\ek\e\\
|
Screen ablakának a címe (%t).
|
| Konsole |
\e]30;\a
|
Konsole lapjának a címe. |
Parancssorkörnyezet észlelése
Tekintse meg az Environment variables#Shell environment detection című leírást.
/dev/tcp megfelelője: ztcp
Használja a zsh/net/tcp modult:
$ zmodload zsh/net/tcp
Innentől kezdve Ön most már létrehozhat TCP-kapcsolatokat:
$ ztcp example.com 80
További részletek a zshmodules(1) § THE_ZSH/NET/TCP_MODULE és a zshtcpsys(1) man súgóleírásokban érhetők el.
Billentyűparancs a parancssorból történő kilépéshez részben kitöltött parancssor esetén
Alapértelmezés szerint a Ctrl+d nem zárja be a parancssort amikor a parancssor nem üresen. Ezt a viselkedést a következő javítja:
.zshrc
exit_zsh() { exit }
zle -N exit_zsh
bindkey '^D' exit_zsh
pacman -F "command not found" handler
A pacman szoftvercsomag-kezelő olyan funkcionalitást tartalmaz, amellyel megkereshetők az egy adott fájlt tartalmazó szoftvercsomagok. Az alábbi command-not-found handler közvetlenül a pacman szoftvercsomag-kezelőt használja a megfelelő szoftvercsomagok megkeresésére, amikor egy ismeretlen parancs kerül végrehajtásra.
~/.zshrc
...
function command_not_found_handler {
local purple='\e[1;35m' bright='\e[0;1m' green='\e[1;32m' reset='\e[0m'
printf 'zsh: command not found: %s\n' "$1"
local entries=(
${(f)"$(/usr/bin/pacman -F --machinereadable -- "/usr/bin/$1")"}
)
if (( ${#entries[@]} ))
then
printf "${bright}$1${reset} may be found in the following packages:\n"
local pkg
for entry in "${entries[@]}"
do
# (repo package version file)
local fields=(
${(0)entry}
)
if [[ "$pkg" != "${fields[2]}" ]]
then
printf "${purple}%s/${bright}%s ${green}%s${reset}\n" "${fields[1]}" "${fields[2]}" "${fields[3]}"
fi
printf ' /%s\n' "${fields[4]}"
pkg="${fields[2]}"
done
fi
return 127
}
...
pacman -Fy paranccsal kell letölteni. Részletekért tekintse meg a pacman (Magyar)#Szoftvercsomag-adatbázisok lekérdezése című leírást.A pkgfile használatán alapuló alternatíváért tekintse meg a #pkgfile "command not found" handler című leírást.
A visszapuffer törlése billentyűkombinációval
Alapértelmezés szerint a képernyő törlésére szolgáló billentyűkombináció a legtöbb parancssorban nem törli a visszapuffert (azt a részt, amelyet felfelé görgetve lehet elérni). Erre a problémára az alábbi adhatja a megoldást.
~/.zshrc
...
function clear-screen-and-scrollback() {
printf '\x1Bc'
zle clear-screen
}
zle -N clear-screen-and-scrollback
bindkey '^L' clear-screen-and-scrollback
...
Harmadik féltől származó bővítmények
Beállítást elősegítő keretrendszerek
- oh-my-posh — Az Oh My Posh egy egyedi prompt motor bármely olyan parancssor számára, amely képes egy függvény vagy változó segítségével módosítani a prompt karakterláncát.
- oh-my-zsh — Népszerű, a Zsh beállításának a kezelésére szolgáló, közösség által fejlesztett keretrendszer. Számos hasznos függvényt, segédfüggvényt, bővítményt és parancssortémát tartalmaz.
- Prezto — A Zsh beállítása számára létrehozott keretrendszer. Modulokat tartalmaz, amelyek észszerű alapértelmezésekkel, álnevekkel (aliaszokkal), függvényekkel, automatikus kiegészítéssel és parancssori témákkal gazdagítják a parancssori felület a környezetét.
- ZIM — Villámgyors, a parancssor beállítását elősegítő keretrendszer, amely moduláris bővítményekkel rendelkezik. A Zim rendkívül könnyen testre szabható, és gazdag modulkészletet, valamint számos funkciót kínál anélkül, hogy a sebesség vagy a funkcionalitás terén kompromisszumot kötne.
Bővítménykezelés
- Antidote — A régi Antibody bővítménykezelő teljes funkcionalitású Zsh implementációja.
- zinit (korábban "zplugin" volt a neve) — Rugalmas Zsh bővítménykezelő letisztult fpath-kezeléssel, jelentésekkel, kiegészítéskezeléssel és turbó móddal ÚJJÁÉLESZTVE.
- zi (korábban "zplugin" volt a neve) — A zplugin alternatív fejlesztési elágazása, amelynek célja az eredeti projekt továbbfejlesztése, nem pedig annak megőrzése és karbantartása, mint a zinit esetében.
- https://github.com/z-shell/zi || not packaged? search in AUR
- sheldon — Gyors, testre szabható, Rust programozási nyelven megírt parancssor-bővítménykezelő.[4]
- Antigen — Zsh bővítménykezelő, amelyet az oh-my-zsh és a vundle ihletett. ELHAGYATOTT fejlesztés.
- zgen — Könnyűsúlyú és egyszerű bővítménykezelő a Zsh számára. ELHAGYATOTT fejlestés.
- zplug — Következő generációs Zsh bővítménykezelő. ELHAGYATOTT fejlesztés.
Fish-szerű szintaxiskiemelés és automatikus javaslatok
A fish nagyon erőteljes parancssori szintaxiskiemelést és automatikus parancssori javaslatokat biztosít. A mindkettő, Zsh-ban történő használata érdekében Ön feltelepítheti a számítógépre a zsh-syntax-highlighting, zsh-autosuggestions szoftvercsomagokat. (Értelemszerűen, az előbb felsorolt szoftvercsomagok tartalmazzák a bővítményeket). Sikeres letöltődés és feltelepülés után, olvassa be az egyik bővítményt (vagy mindkettő bővítményt) a Zsh beállításfájl (zshrc) végén található szkript egyikével. Ügyeljen arra, hogy a zsh-syntax-highlighting bővítmény a zsh-autosuggestions bővítmény után legyen betöltve a Zsh parancssorba [5]:
~/.zshrc
source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
pkgfile "command not found" handler
A pkgfile tartalmaz egy Zsh szkriptfájlt, amely biztosít egy command_not_found_handler függvényt. A függvény automatikusan megkeresi a pkgfile adatbázist, amikor Ön egy fel nem ismert parancsot gépel be.
Azért, hogy a szkriptfájl engedélyezve legyen, Önnek az be kell olvasnia. Például:
~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
A pacman natív funkcionalitását használó alternatíváért, tekintse meg a #pacman -F "command not found" handler című leírást.
Hibaelhárítás
IOT utasítás
Az IOT instruction üzenet csupán azt jelenti, hogy egy alkalmazás a 6-os jelzéssel (SIGABRT, megszakítási jelzés) fejezte be a lefutását. A patch már az upstream-ben van (tehát használható a zsh-gitAUR), és a 5.10-es verzióban kerül alkalmazásra. További információkért tekintse meg a [6], [7], valamint signal(7) § Standard signals man súgóleírást.
További olvasnivaló a témában
- Wikipedia:Zsh
- An Introduction to the Z Shell
- A User's Guide to ZSH
- Z Shell dokumentációja. (Különböző formátumban itt érhető el.)
- Zsh FAQ
- zsh-lovers(1) (Benne van a zsh-lovers szoftvercsomagban.)
- Gentoo: Zsh/Guide
- Bash2Zsh Reference Card