Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
Tipy a Triky
Obcování s ďáblem 9: Nové finty na programy
20. září 2001, 00.00 | Spustit program již umíme, a také víme, že většina příkazů shellu jsou docela obyčejné programy. Jak je tomu ale s normálními aplikacemi?
Spustit program již umíme, a také víme, že většina příkazů shellu jsou docela obyčejné programy — stejně jako kdybychom si je napsali sami v C (viz příklad z čtvrtého dílu). Jak je tomu ale s aplikacemi?Aplikace OS X
Jak už asi většina z vás ví, aplikace v Mac OS X jsou ve skutečnosti složky s poměrně složitou vnitřní strukturou. Naštěstí pro nás je však uvnitř ukryt docela obyčejný program, který můžeme spustit jako každý jiný — zapsáním jeho cesty a jména na příkazový řádek. Takhle např. spustíme TextEdit:
44 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit
U všech aplikací je to stejné: uvnitř aplikační složky je složka "Contents", v ní je další složka "MacOS", a v ní je spustitelný program; ten má stejné jméno jako aplikační složka, jen bez přípony ".app".
Povšimněte si ale, že ve výpisu chybí nový prompt, za nímž by shell čekal na další příkaz. Nezapomněl jsem jej přenést do textu; skutečně tam není; to je proto, že shell čeká, až spuštěný program skončí (nejinak tomu bylo s "vnořenými" shelly na konci minulého dílu, jen si vzpomeňte). U programů, které jsme si ukazovali dosud, je to žádoucí chování; u aplikací, se kterými pracujeme prostředictvím jejich oken a menu to ale jen "znehodnotí" shell, dokud s aplikací pracujeme! Co s tím?
Nejjednodušší samozřejmě je otevřít další okno shellu a pracovat dál v něm. Někdy to tak sám dělám; často je to ale nepohodlné — už jen proto, že stávající shell si "pamatuje" řadu naposledy použitých příkazů a podobně. Obvykle je proto šikovnější využít toho, že Mac OS X je multitáskový systém: napíšeme-li na konec libovolného příkazu ampersand, shell jej spustí, ale na jeho ukončení nečeká: ihned zobrazí další prompt, a můžeme dále pracovat. tomu se říká spustit program na pozadí ("in background"). Tak lze spustit třeba pět TextEditů najednou:
61 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit & [1] 8193 62 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit & [2] 8194 63 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit & [3] 8195 64 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit & [4] 8196 65 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit & [5] 8197 66 /tmp>
Čísla v hranatých závorkách, která shell zobrazí, jsou důležitá: pod těmito čísly si totiž shell na pozadí spuštěné programy pamatuje (pod čísly mimo závorky si je pamatuje operační systém, a to nás prozatím nezajímá). Pokud třeba přepneme do jednoho z TextEditů a ukončíme jej (normálně příkazem Quit), shell nás o tom informuje takto:
66 /tmp> [3] done /Applications/TextEdit.app/Contents/MacOS/TextEdit 66 /tmp>
Když program nespolupracuje...
Sami tato čísla také můžeme používat, chceme-li se na spuštěný program odkázat. U standardních programů Mac OS X je to velmi nepravděpodobné, ale dejme tomu, že program "zmrzl", a chceme jej ukončit. Ovšem, je tady politicky korektní "Force Quit" z doku; my ale pracujeme v shellu, a tam se newspeak nepoužívá: "přinutit ke konci" znamená zabít (z hlediska programu), a proto se odpovídající příkaz odjakživa jmenuje kill. Číslo programu se mu dává za znakem '%':
66 /tmp> kill %1 67 /tmp> [1] terminated /Applications/TextEdit.app/Contents/MacOS/TextEdit 67 /tmp> kill %5 68 /tmp> [5] + terminated /Applications/TextEdit.app/Contents/MacOS/TextEdit 68 /tmp>
A kdybychom chtěli "odstřelit" program, který neběží na pozadí, ale normálně (takže mu dočasně okno terminálu "patří" a shell čeká na jeho ukončení), je to ještě jednodušší — prostě stiskneme kombinaci Control-C.
Pozastavení programu
Shell toho s klávesou Control umí víc: co když jsme spustili nějakou aplikaci normálně, a potřebujeme ji převést na pozadí až za běhu? Nic jednoduššího: nejprve musíme běžící program na chvíli přerušit, abychom mohli k shellu — k tomu slouží kombinace Control-Z. Pak použijeme příkaz bg ("BackGround it"), který přerušený program spustí dál — ale už na pozadí:
70 /tmp> /Applications/TextEdit.app/Contents/MacOS/TextEdit ^Z zsh: suspended /Applications/TextEdit.app/Contents/MacOS/TextEdit 71 /tmp> bg %% [1] continued /Applications/TextEdit.app/Contents/MacOS/TextEdit 72 /tmp>
Dvě procenta v příkazu bg znamenají "ten program, který jsme právě pozastavili".
Mimochodem, kombinaci Control-Z můžeme samozřejmě použít i v případě, že zrovna pracujeme v nějakém programu, a chceme si jen na chvilku "odskočit" do shellu; třeba proto, abychom vytvořili složku, do níž chceme uložit soubor získaný prostřednictvím FTP. Pak se samozřejmě budeme chtít do programu hned vrátit — k tomu slouží příkaz fg ("ForeGround it"):
74 /tmp> ftp next Connected to next. 220 next FTP server (Version 5.1 (NeXT 1.0) Mon Jul 12, 1999) ready. ... ftp> ^Z zsh: suspended ftp next 75 /tmp> mkdir prijatoZNexta 76 /tmp> fg %% [3] - continued ftp next lcd prijatoZNexta Local directory now /private/tmp/prijatoZNexta ftp> get NSSharedFullColorAlpha.tiff ...
Příště...
...budeme s fintami pro spouštění programů plynule pokračovat.
Obsah seriálu (více o seriálu):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová