Obcování s ďáblem 9: Nové finty na programy - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

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:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se narodil známý fotograf František Drtikol?

V dnešní soutěži hrajeme o:

Seriály

Více seriálů



Software

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):

Tématické zařazení:

 » Rubriky  » Informace  

 » Rubriky  » Agregator  

 » Rubriky  » Tipy a Triky  

 » Rubriky  » Začínáme s  

 » Rubriky  » Software  

Diskuse k článku

 

Vložit nový příspěvek   Sbalit příspěvky

 

Zatím nebyl uložen žádný příspěvek, buďte první.

 

 

Vložit nový příspěvek

Jméno:

Pohlaví:

,

E-mail:

Předmět:

Příspěvek:

 

Kontrola:

Do spodního pole opište z obrázku 5 znaků:

Kód pro ověření

 

 

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: