Portál AbcLinuxu, 2. května 2025 10:45
Po delší době jsem opět zasedl k psaní blogísku. Dneska si vezmu na mušku historii příkazů příkazového interpretu, neboli shellu. Jelikož jsem uživatelem Bashe, bude řeč právě o něm.
Všichni moc dobře určitě známe pohyb nebo lépe řečeno listování v historii
pomocí kláves "šipka nahoru" a "šipka dolu". To je však často velmi nepohodlné
a zdlouhavé. Naštěstí Bash dovoluje využít vyhledávání v historii. Například
pokud víme, že před dvěma dny jsme psali velice dlouhý příkaz a nechce se nám
jej většinou vymýšlet znova, tedy alespoň mě ne. Díky reverznímu prohledávání v
historie máme ale velmi užitečného pomocníka. Samozřejmě mohli bychom
prohledávat historii příkazů pomocí šipky nahoru ale uznejte sami že tohle je
poněkud pracné. Hledání v bash historii zpřístupňuje klávesová zkratka
CTRL+r
. Postačí psát libovolnou část příkazu, dokud se neobjeví
ten, který jsme hledali. Úspěšnost hledání závisí na nastavené velikosti historie.
Historie příkazů je v shellu Bash implicitně zapnuta. Vypíná se pomocí holby
+H
vestavěného příkazu set
. Historie je řízena těmito
proměnnými: HISTSIZE
, HISTFILE
,
HISTFILESIZE
, HISTCONTROL
a
command_oriented_history
. Pokud navíc budeme požadovat osmibitový
vstup, musíme do souboru ~/.inputrc
vložit následující příkazy:
set meta-flag on set output-meta on set convert-meta off
Často se setkáváme s pojmy jako interaktivní, neinteraktivní a login shell.
Co to vlastně je?
Login shell je interpret příkazů který má
jméno ve tvaru "-jmeno", tedy například echo $0
vrátí
-bash
. Jedná se o první shell uživatele, tedy ten který je
spuštěn při přihlášení.
Interaktivní shell je takový, který má svůj standardní vstup i
výstup napojen na terminál, často bývá spouštěn s volbou -i
. Jak
již název vypovídá, je takový shell, který umožňuje přímou interakci s
uživatelem.
Neinteraktivní shell Neinteraktivní shell se ukončí při
zjištění prvního chybového návratového kódu, který není ve skriptu testován.
Shell se neukončuje tehdy, pokud proces s chybným návratovým kódem řídí příkazy
if, elif, while, until, nebo pokud je za procesem uveden operátor && nebo ||
(nebo pokud se návratový kód neguje uvedením !). Pro tento shell není
uplatňována historie.
set -o emacs/vi on
Tab - klávesa, která doplní název proměnné (začíná-li text $),
uživatelského jména (začíná-li text ~), hostname (začíná-li text ), příkazu (spustitelného souboru, aliasu i
funkce) a jména souboru v pořadí tak, jak bylo napsáno.
Ctrl+a - tato kombinace vrátí kurzor na začátek řádky.
Ctrl+l - vyčistí obrazovku ale zachová aktuální řádku tak, jak byla napsána (vhodné,
pokud jste neco lehce nevychytali a nechcete, aby to ten, kdo u vás sedí viděl).
Ctrl+e - posune kurzor na konec řádku.
Ctrl+r - tohle už známe.
Ctrl+s - dopředné hledání v historii příkazů.
Ctrl+t - opět skvělá kombinace, prohodí písmenko pod kurzorem
s písmenem předcházejícím (obzvlášť vhodné na zkomoleniny typu mroe apod.).
Ctrl+b - přesune kurzor o jeden znak spět.
Ctrl+f - přesune kurzor o jeden znak kupředu.
Ctrl+d - vymaže znak na pozici kurzoru.
Ctrl+_ - o krok zpět, opakuje poslední akci.
Ctrl+w - obdobně jako Alt-DEL (ale ne naprosto stejně) smaže
předchozí slovo.
Ctrl+y - vloží před tím smazaný text na aktuální pozici
kurzoru na řádce.
Ctrl+p - předchozí příkaz v historii příkazů ,téhož lze
dosáhnout šipkou nahoru.
Alt+. - vloží na pozici kurzoru poslední slovo předchozího příkazu (by Ritchie).
history [-počet] - vypíše historii příkazů (posledních "počet"
příkazů).
!! - zopakuje poslední příkaz.
!4 - zopakuje příkaz číslo 4.
!$ - zopakuje poslední parametr posledního příkazu.
!^ - zopakuje první parametr posledního příkazu.
!* - zopakuje všechny parametry posledního příkazu.
!:0 - nultý parametr posledního příkazu (čili samotný příkaz
bez dalších parametrů).
!:2-4 - druhý až čtvrtý parametr.
!:-3 - nultý až třetí parametr.
!847:2-4 - nemusíme samozřejmě operovat jen s posledním
příkazem - takto pracujeme s příkazem číslo 847.
!!:s/řetězec1/řetězec2/ - provede poslední příkaz + nahradí
řetězec1 řetězcem2 (stejné jako ^string1^string2^).
Klávesových zkratek je samozřejmě mnohem více, pro další doporučuji
prostudovat manuálové stránky Bashe. Klávesové zkratky lze měnit a to v souboru
uvedeném v proměnné INPUTRC nebo v souboru ~/.inputrc
.
Knihovna readline se používá při načítání řádků v interaktivním shellu. Obsahuje soubor funkcí, jejichž pomocí můžeme při zadávání opravovat a vybírat příkazy ze zásobníku historie příkazů. Implicitně jsou použity příkazy editoru Emacs, lze samozřejmě přepnout i do módu editoru Vi.
Tiskni
Sdílej:
Alt + .
, která vloží na pozici kurzoru poslední slovo předchozího příkazu.
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.