Tipy & triky · Workflow · Všude · ~2 min denně · 2 min čtení
Dva vykřičníky zopakují poslední příkaz — i se sudo před ním
Naposledy ověřeno:

Každý, kdo pracuje s terminálem, zná ten moment: spustíte příkaz, terminál odpoví Permission denied — a vy víte, že jste zase zapomněli sudo. Místo šipky nahoru, skoku na začátek řádku a dopisování stačí napsat sudo !!. Dvojice vykřičníků se v bashi a zsh rozbalí na celý předchozí příkaz, takže se spustí totéž, jen tentokrát s právy správce. Vykřičníková historie umí ještě jeden trik, který se hodí denně: !$ znamená „poslední argument předchozího příkazu“ — typicky cesta k souboru, kterou tak nemusíte psát podruhé.
Jak na to
- Spustíte příkaz, který selže na oprávnění — třeba zápis do systémové složky. Napište
sudo !!a stiskněte Enter: shell nejdřív vypíše, co se skutečně spustí, a provede předchozí příkaz sesudona začátku. !!funguje i jinde než se sudo:echo !!vám předchozí příkaz jen vypíše, což se hodí pro kontrolu, než ho někam vložíte.!$vloží poslední argument minulého řádku. Pomkdir ~/projekty/novy-webstačícd !$— a jste uvnitř právě vytvořené složky. Pols -l /dlouha/cesta/k/souboru.confotevřete tentýž soubor přesnano !$.- Když si nejste jistí, co se rozbalí, přidejte na konec
:p—!!:ppříkaz jen vytiskne a zařadí do historie, ale nespustí. Interaktivní obdoba: Alt + . vkládá poslední argument přímo na řádek a opakovaným stiskem listuje staršími. - Vykřičníky patří bashi a zsh — na Windows je máte v Git Bashi nebo ve WSL, v PowerShellu tato zkratka není.
Vzorová situace
Správce instaluje balíček: apt install htop, odpověď „are you root?“. Napíše sudo !!, hotovo — rychlejší než jakékoli klikání či přepisování. O minutu později rozbaluje archiv do nové složky: mkdir /opt/aplikace/v2 a hned cd !$, tar -xzf balik.tar.gz. Dlouhou cestu psal jedinkrát, pak už za něj pracovaly vykřičníky. Za den se takových momentů nasbírá tucet — a každý znamená jeden nepřepsaný (a nepřeklepnutý) řádek.
Jedno varování k opatrnosti: vykřičník se rozbaluje i uvnitř uvozovek, takže když píšete text s vykřičníky (třeba commit zprávu nadšeného ladění), použijte apostrofy — git commit -m 'Konečně funguje!' projde, s uvozovkami by se shell pokusil ! rozbalit jako historii. Tohle je mimochodem nejčastější zdroj záhadné hlášky event not found.
Co vám to přinese
Nejčastější drobná selhání v terminálu — zapomenuté sudo a dvakrát psaná cesta — se smrsknou na pár znaků. Méně překlepů, protože dlouhé argumenty píšete jen jednou. A dobrá zpráva na závěr: tyhle zkratky fungují na každém serveru, kam se přihlásíte, bez jakékoli instalace či konfigurace.
Chcete jít do hloubky? V příručce najdete kapitolu Základní systémy: inbox, priority, revize.
Podobné tipy
git commit --amend: opravte poslední commit místo commitu „oprava“
Zapomenutý soubor nebo překlep ve zprávě nepotřebuje nový commit. --amend přepíše ten poslední, jako by se chyba nikdy nestala.
Globální .gitignore: .DS_Store řešte jednou provždy
Soubory vašeho systému a editoru nepatří do .gitignore každého projektu. Nastavte si globální ignore soubor — platí pro všechny repozitáře.
git reflog: záchrana, když jste si „smazali“ commity
Špatný reset, smazaná větev, rozbitý rebase? git reflog ukáže historii všeho, kde HEAD byl — a ztracené commity jdou vrátit.
Pomohlo vám to?
Líbil se vám tip?
Každý týden posílám jeden takový do e-mailu. Dvě minuty čtení, hodiny úspor.
1 tip týdně · žádný spam · odhlášení jedním klikem