exec - vyvolání podprocesů
Synopse
exec? přepínače ? arg ? arg … ?
Popis
Tento příkaz zachází s jeho argumenty jako se specifikací jednoho nebo více podprocesů, které mají být provedeny. Argumenty mají formu standardního potrubí, ve kterém je každý arg se stane jedním slovem příkazu a každý z jednotlivých příkazů se stává podprocesem.
Pokud jsou původní argumentyexec začít s- pak jsou považovány za přepínače příkazového řádku a nejsou součástí specifikace potrubí. V současné době jsou podporovány následující přepínače:
-keepnewline
Zachovává nový koncový řádek ve výstupu potrubí. Za normálních okolností bude smazán nový řádek.
--
Označuje konec přepínačů. Argument, který následuje po tomto, bude považován za první argument arg i když začíná a-.
Pokud ano arg (nebo dvojic arg 's) má jednu z forem popsaných níže, pak je používánexec pro řízení toku vstupů a výstupů mezi podprocesy. Tyto argumenty nebudou předány podprocesu (subprocesům). Ve formách jako `` < název souboru '' název souboru může být buď v samostatném argumentu od `` '', nebo ve stejném argumentu bez intervenčního prostoru (tj. `` < název souboru '').
|
Odděluje odlišné příkazy v potrubí. Standardní výstup předchozího příkazu bude přiveden do standardního vstupu dalšího příkazu.
|&
Odděluje odlišné příkazy v potrubí. Jak standardní výstup, tak standardní chyba předchozího příkazu budou pipraveny do standardního vstupu dalšího příkazu. Tato forma přesměrování přepíše podoby jako 2> a>.
< název souboru
Soubor s názvem název souboru se otevře a použije jako standardní vstup pro první příkaz v potrubí.
<@ fileId
FileId musí být identifikátor otevřeného souboru, například návratová hodnota z předchozího voláníotevřeno. Používá se jako standardní vstup pro první příkaz v potrubí. FileId musí být otevřené pro čtení.
<< hodnota
Hodnota je předán prvnímu příkazu jako jeho standardní vstup.
> název souboru
Standardní výstup z posledního příkazu je přesměrován na soubor s názvem název souboru , přepsat jeho předchozí obsah.
2> název souboru
Standardní chyba ze všech příkazů v potrubí je přesměrována do souboru s názvem název souboru , přepsat jeho předchozí obsah.
>& název souboru
Jak standardní výstup z posledního příkazu, tak standardní chyba ze všech příkazů jsou přesměrovány do souboru s názvem název souboru , přepsat jeho předchozí obsah.
>> název souboru
Standardní výstup z posledního příkazu je přesměrován na soubor s názvem název souboru , připojit k němu spíše než přepsat.
2>> název souboru
Standardní chyba ze všech příkazů v potrubí je přesměrována do souboru s názvem název souboru , připojit k němu spíše než přepsat.
>>& název souboru
Jak standardní výstup z posledního příkazu, tak standardní chyba ze všech příkazů jsou přesměrovány do souboru s názvem název souboru , připojit k němu spíše než přepsat.
>@ fileId
FileId musí být identifikátor otevřeného souboru, například návratová hodnota z předchozího voláníotevřeno. Standardní výstup z posledního příkazu je přesměrován na fileId který musel být otevřen pro psaní.
2>@ fileId
FileId musí být identifikátor otevřeného souboru, například návratová hodnota z předchozího voláníotevřeno. Standardní chyba ze všech příkazů v potrubí je přesměrována na fileId Soubor. Soubor musí být otevřen pro psaní.
>&@ fileId
FileId musí být identifikátor otevřeného souboru, například návratová hodnota z předchozího voláníotevřeno. Jak standardní výstup z posledního příkazu, tak standardní chyba ze všech příkazů jsou přesměrovány na fileId Soubor. Soubor musí být otevřen pro psaní.
Pokud standardní výstup nebyl přesměrován, pakexec příkaz vrátí standardní výstup z posledního příkazu v potrubí. Pokud některý z příkazů v potrubí odchází abnormálně nebo je zabit nebo pozastaven, pakexec vrátí chybu a chybová zpráva bude obsahovat výstup plynovodu následovaný chybovými zprávami popisujícími abnormální ukončení;chybový kód proměnná bude obsahovat další informace o posledním abnormálním ukončení. Pokud některý z příkazů zapíše do standardního souboru chyb a standardní chyba není přesměrována, pakexec vrátí chybu; chybová zpráva bude obsahovat standardní výstup potrubí, následované zprávami o abnormálních ukončeních (pokud existují), následovaný standardním chybovým výstupem.
Pokud poslední znak výsledku nebo chybová zpráva je nový řádek, pak je tento znak normálně odstraněn z výsledku nebo chybové zprávy. To je v souladu s dalšími návratovými hodnotami Tcl, které obvykle nekončí novými řádky. Nicméně pokud-keepnewline je zadán, zůstane zachován nový koncový řádek.
Pokud standardní vstup není přesměrován `` <'' nebo `` << '' nebo `` <@ '', standardní vstup pro první příkaz v potrubí je převzat z aktuálního standardního vstupu aplikace.
Pokud je poslední arg je `` & '', pak bude potrubí provedeno v pozadí. V tomto případěexecpříkaz vrátí seznam, jehož elementy jsou identifikátory procesu pro všechny podprocesy v potrubí.Standardní výstup z posledního příkazu v potrubí přejde na standardní výstup aplikace, pokud nebyl přesměrován, a chybový výstup ze všech příkazů v potrubí přejde do standardního souboru chyb aplikace, pokud není přesměrován.
První slovo v každém příkazu je přijato jako jméno příkazu; na něm je provedena náhrada tilde a pokud výsledek neobsahuje žádné lomítka, adresáře v proměnné prostředí PATH jsou vyhledávány spustitelným jménem. Pokud název obsahuje lomítko, musí se odkazovat na spustitelný soubor dostupný z aktuálního adresáře. Neexistuje žádná expanze typu `glob 'nebo jiné náhrady podobné shellu na argumenty k příkazům.
Problémy přenositelnosti
Okna (všechny verze)
Při čtení nebo zápisu do zásuvky pomocí tlačítka ``@ fileId '' notace, nefunguje. Při čtení ze soketu visí 16bitová aplikace DOS a 32bitová aplikace se okamžitě vrátí s koncem souboru. Když jeden typ aplikace zapíše do soketu, informace jsou místo toho odeslány do konzoly, pokud je přítomna, nebo je vyřazena.
Textový widget Tk konzoly neposkytuje skutečné standardní možnosti IO. Pod Tk při přesměrování ze standardního vstupu budou všem aplikacím vidět okamžitý konec souboru; informace přesměrované na standardní výstup nebo standardní chyba budou vyřazeny.
Lupy dopředu nebo dozadu jsou přijímány jako oddělovače cest pro argumenty příkazů Tcl. Při spuštění aplikace může název cesty zadaný pro aplikaci obsahovat také oddělovače směru vpřed nebo vzad. Mějte však na paměti, že většina aplikací systému Windows přijímá argumenty s lomítkem dopředu pouze jako oddělovače možností a zpětné lomítko pouze v cestách. Jakékoli argumenty pro aplikaci, která určují název cesty s lomítkem vpřed, nebudou automaticky převedeny na použití zpětného lomítka. Pokud argument obsahuje lomítka dopředu jako oddělovač cesty, může nebo nemusí být rozpoznán jako název cesty v závislosti na programu.
Při volání na 16bitovou aplikaci DOS nebo Windows 3.X musí všechny názvy cest používat krátký, tajný formát cesty (např. Pomocí `` applba ~ 1.def '' namísto `` applbakery.default '' ).
Dvě nebo více dopředu nebo dozadu v řádku v cestě odkazují na síťovou cestu. Například jednoduché zřetězení kořenového adresářeC:/ s podadresářem/ windows / systém výnosc: // windows / system (dvě lomítka dohromady), která se vztahuje k bodu voláníSystém na stroji nazvanémOkna (aC:/ je ignorována) a není ekvivalentníc: / windows / systém, který popisuje adresář na aktuálním počítači. Thesoubor join příkazu byste měli použít ke spojování složek cesty.
Windows NT
Při pokusu o spuštění aplikace,exec nejprve vyhledá název, jak byl zadán. Pak, v pořádku,.com, .exe, a.netopýr jsou připojeny na konec zadaného jména a hledá delší název. Pokud nebyl zadán název adresáře jako součást názvu aplikace, vyhledávají se následující adresáře při pokuse o nalezení aplikace:
Adresář, ze kterého byl načten Tcl spustitelný soubor.Aktuální adresář.Adresář 32bitového systému Windows NT.Adresář systému Windows NT 16 bitů.Domovský adresář systému Windows NT.Adresáře uvedené v cestě. Chcete-li spustit příkazy vestavěné prostředí jakodir akopírovat, volající musí předplatit ``cmd.exe / c'' na požadovaný příkaz. Windows 95 Při pokusu o spuštění aplikace,exec nejprve vyhledá název, jak byl zadán. Pak, v pořádku,.com, .exe, a.netopýr jsou připojeny na konec zadaného jména a hledá delší název. Pokud nebyl zadán název adresáře jako součást názvu aplikace, vyhledávají se následující adresáře při pokuse o nalezení aplikace: Adresář, ze kterého byl načten Tcl spustitelný soubor.Aktuální adresář.Adresář systému Windows 95.Domovský adresář systému Windows 95.Adresáře uvedené v cestě. Chcete-li spustit příkazy vestavěné prostředí jakodir akopírovat, volající musí předplatit ``command.com / c'' na požadovaný příkaz. Jakmile 16bitová aplikace DOS přečte standardní vstup z konzoly a potom ukončí, všechny následně spustit 16bitové aplikace DOS uvidí standardní vstup jako již uzavřený. 32bitové aplikace nemají tento problém a budou fungovat správně i po 16bitové aplikaci DOS, která si myslí, že standardní vstup je uzavřen. V této chvíli není známo žádné řešení tohoto problému. Přesměrování meziNUL: zařízení a 16bitová aplikace nefungují vždy. Při přesměrování zNUL:, některé aplikace mohou zablokovat, jiné získají nekonečný proud `` 0x01 '' bajtů a některé skutečně správně získají okamžitý konec souboru; zdá se, že chování závisí na tom, co je kompilováno do samotné aplikace. Při přesměrování více než 4K nebo takNUL:, některé aplikace budou viset. Výše uvedené problémy se nevyskytují u 32bitových aplikací. Všechna DOS 16bitová aplikace běží synchronně. Všechny standardní vstupy z potrubí do 16bitové aplikace DOS se shromažďují do dočasného souboru; druhý konec potrubí musí být zavřen před spuštěním aplikace 16bitové aplikace DOS.Všechny standardní výstupy nebo chyby ze 16bitové aplikace DOS na potrubí jsou shromažďovány do dočasných souborů; musí být aplikace ukončena předtím, než budou dočasné soubory přesměrovány do další fáze potrubí. To je způsobeno řešením chyby systému Windows 95 při implementaci potrubí a je to, jak standardní systém Windows 95 DOS shell zpracuje potrubí sám. Některé aplikace, napříkladcommand.com, by neměly být prováděny interaktivně. Aplikace, které přímo přistupují k oknu konzoly namísto čtení z jejich standardního vstupu a zápisu na standardní výstup, se mohou nezdařit, zavěsit Tcl nebo dokonce zavěsit systém, pokud jejich soukromé okno konzoly není k dispozici. Macintosh Theexec příkaz není implementován a v systému Macintosh neexistuje. Unix Theexec příkaz je plně funkční a pracuje tak, jak je popsáno. chyba (n), otevřená (n) spustit, potrubí, přesměrování, podproces Důležité: Použijte muž příkaz ( % muž ), abyste zjistili, jak je v daném počítači použit příkaz. Viz též
Klíčová slova




