Exec - Linux Command - Unix Command

exec - vyvolanie podprocesov

synopse

exec ? prepínače ? arg ? arg ... ?

popis

Tento príkaz zaobchádza s jeho argumentmi ako so špecifikáciou jedného alebo viacerých podprocesov, ktoré sa majú vykonať. Argumenty majú formu štandardného shell shell, kde každý arg sa stáva jedným slovom príkazu a každý odlišný príkaz sa stáva podprocesom.

Ak počiatočné argumenty začínajú s - potom sa považujú za prepínače príkazového riadku a nie sú súčasťou špecifikácie potrubia. V súčasnosti sú podporované nasledujúce prepínače:

-keepnewline

Zachováva nový výstup v potrubí. Za normálnych okolností bude vymazaný nový riadok.

-

Označuje koniec prepínačov. Argument, ktorý nasleduje po tomto, bude považovaný za prvý argument, aj keď začína s - .

Ak arg (alebo pár arg 's) má jednu z foriem popísaných nižšie, potom sa používa exec na riadenie toku vstupov a výstupov medzi subprocesmi. Takéto argumenty nebudú odovzdané do podprocesov. Vo formách ako `` < fileName '' názov_souboru môže byť buď v samostatnom argumentu z `` <'', alebo v rovnakom argumente bez intervenčného priestoru (tj `` < fileName '').

|

Oddeľuje odlišné príkazy v potrubí. Štandardný výstup predchádzajúceho príkazu bude zasunutý do štandardného vstupu ďalšieho príkazu.

| &

Oddeľuje odlišné príkazy v potrubí. Štandardný výstup a štandardná chyba predchádzajúceho príkazu budú zaslané do štandardného vstupu ďalšieho príkazu. Táto forma presmerovania nahrádza formuláre ako 2> a> &.

< fileName

Súbor s názvom fileName sa otvorí a použije ako štandardný vstup pre prvý príkaz v potrubí.

<@ fileId

FileId musí byť identifikátor otvoreného súboru, napríklad návratová hodnota z predchádzajúceho hovoru na otvorenie . Používa sa ako štandardný vstup pre prvý príkaz v potrubí. FileId musí byť otvorený na čítanie.

hodnota

Hodnota sa odovzdáva prvému príkazu ako jeho štandardný vstup.

> názov_souboru

Štandardný výstup z posledného príkazu je presmerovaný na súbor s názvom fileName , ktorý prepíše jeho predchádzajúci obsah.

2> názov_souboru

Štandardná chyba zo všetkých príkazov v pipeline je presmerovaná do súboru s názvom fileName , ktorý prepíše jeho predchádzajúci obsah.

> & fileName

Štandardný výstup z posledného príkazu a štandardná chyba zo všetkých príkazov sa presmerujú na súbor s názvom fileName , ktorý prepíše jeho predchádzajúci obsah.

>> fileName

Štandardný výstup z posledného príkazu sa presmeruje na súbor s názvom fileName , ktorý sa k nemu pripojí a nie na jeho prepisovanie.

2 >> fileName

Štandardná chyba zo všetkých príkazov v pipeline je presmerovaná do súboru s názvom fileName , pripojením k nej namiesto prepísania.

>> & fileName

Štandardný výstup z posledného príkazu a štandardná chyba zo všetkých príkazov sa presmerujú na súbor s názvom fileName , ktorý sa k nemu pripojí a nie k prepísaniu.

> @ fileId

FileId musí byť identifikátor otvoreného súboru, napríklad návratová hodnota z predchádzajúceho hovoru na otvorenie . Štandardný výstup z posledného príkazu je presmerovaný do súboru fileId , ktorý musí byť otvorený pre zápis.

2> @ fileId

FileId musí byť identifikátor otvoreného súboru, napríklad návratová hodnota z predchádzajúceho hovoru na otvorenie . Štandardná chyba zo všetkých príkazov v pipeline je presmerovaná do súboru fileId . Súbor musí byť otvorený na písanie.

> & & fileId

FileId musí byť identifikátor otvoreného súboru, napríklad návratová hodnota z predchádzajúceho hovoru na otvorenie . Štandardný výstup z posledného príkazu a štandardná chyba zo všetkých príkazov sa presmerujú do súboru fileId . Súbor musí byť otvorený na písanie.

Ak štandardný výstup nebol presmerovaný, príkaz exec vráti štandardný výstup z posledného príkazu do potrubia. Ak niektorý z príkazov v potrubí odchádza abnormálne alebo je zabitý alebo pozastavený, potom exec vráti chybu a chybové hlásenie bude obsahovať výstup potrubia nasledovaný chybovými hláseniami opisujúcimi abnormálne ukončenie; premenná errorCode bude obsahovať ďalšie informácie o poslednom abnormálnom ukončení. Ak niektorý z príkazov zapíše do štandardného súboru chýb a táto štandardná chyba nie je presmerovaná, potom exec vráti chybu; chybové hlásenie bude obsahovať štandardný výstup potrubia, nasledované správami o abnormálnych ukončeních (ak nejaké sú), za ktorými nasleduje štandardný výstup chyby.

Ak posledný znak výsledku alebo chybové hlásenie je nový riadok, potom sa tento znak z výsledku alebo chybové hlásenie zvyčajne odstráni. To je v súlade s inými návratovými hodnotami Tcl, ktoré zvyčajne nekončia s novými riadkami. Ak je však zadaná -keepnewline, zachová sa koncový nový riadok.

Ak štandardný vstup nie je presmerovaný pomocou `` '' alebo `` '' alebo `` <@ '', štandardný vstup pre prvý príkaz v potrubí je prevzatý z aktuálneho štandardného vstupu aplikácie.

Ak posledné arg je `` & '', potom bude potrubie vykonané v pozadí. V tomto prípade príkaz exec vráti zoznam, ktorého prvky sú procesné identifikátory pre všetky podprocesy v potrubí. Štandardný výstup z posledného príkazu v potrubí prejde na štandardný výstup aplikácie, ak nebol presmerovaný, a výstup chyby zo všetkých príkazov v potrubí sa dostane do štandardného súboru chyby aplikácie, pokiaľ nie je presmerovaný.

Prvé slovo v každom príkaze sa považuje za meno príkazu; na ňom sa vykoná substitúcia tilde a ak výsledok neobsahuje žiadne lomky, adresáre v premennej prostredia PATH sa hľadajú spustiteľný súbor pod daným menom. Ak názov obsahuje lomku, musí sa odkazovať na spustiteľný súbor, ktorý je dostupný z aktuálneho adresára. Neexistuje rozšírenie typu "glob" alebo iné shell-like substitúcie na argumenty pre príkazy.

Problémy s prenosnosťou

Windows (všetky verzie)

Čítanie alebo zápis do zásuvky pomocou notácie `` fileId '' nefunguje. Pri čítaní zo soketu visí 16-bitová aplikácia DOS a 32-bitová aplikácia sa ihneď vráti s koncom súboru. Keď sa niektorý typ aplikácie zapíše do soketu, informácie sa namiesto toho odošlú do konzoly, ak je prítomná, alebo sa zlikviduje.

Textový widget Tk konzoly neposkytuje skutočné štandardné funkcie IO. Pod Tk sa pri presmerovaní zo štandardného vstupu zobrazia všetky aplikácie okamžitý koniec súboru. informácie presmerované na štandardný výstup alebo štandardná chyba budú zlikvidované.

Buď dopredu alebo dozadu lomky sú akceptované ako separátory cesty pre argumenty Tcl príkazy. Pri vykonávaní aplikácie môže názov cesty špecifikovaný pre aplikáciu obsahovať aj spätné lomky dopredu alebo dozadu ako oddeľovače cesty. Majte však na pamäti, že väčšina aplikácií systému Windows prijíma argumenty s lommi vpred len ako oddeľovače možností a spätné lomky iba v cestách. Akékoľvek argumenty pre aplikáciu, ktorá určuje názov cesty s lommi vpred, nebudú automaticky konvertované na použitie znaku spätného lomítka. Ak argument obsahuje lomítka dopredu ako oddeľovač cesty, môže byť alebo nemusí byť rozpoznaný ako názov cesty v závislosti od programu.

Okrem toho, pri volaní na 16-bitovú aplikáciu DOS alebo Windows 3.X, všetky názvy ciest musia používať krátky, šifrovaný formát cesty (napr. Pomocou `` applba ~ 1.def '' namiesto `` applbakery.default '' ).

Dve alebo viac vpred alebo vzad v línii v jednej ceste sa týka cesty siete. Napríklad jednoduché zlučovanie koreňového adresára c: / s podadresárom / windows / system prináša c: // windows / system (dve lomítka dohromady), ktorý sa vzťahuje na bod pripojenia nazvaný systém na stroji s názvom windows (a c: / ignorovaná) a nie je ekvivalentná c: / windows / system , ktorá popisuje adresár na aktuálnom počítači. Príkaz join join by mal byť použitý na zlučovanie komponentov cesty.

Windows NT

Pri pokuse o spustenie aplikácie vykoná najprv vyhľadávanie pre meno, ako bolo zadané. Potom sa do príkazu .com , .exe a .bat pripojí koniec zadaného názvu a hľadá dlhšie meno. Ak nebol zadaný názov adresára ako súčasť názvu aplikácie, pri vyhľadávaní aplikácie sa automaticky hľadajú nasledujúce adresáre:

Adresár, z ktorého bol načítaný spustiteľný súbor Tcl.
Aktuálny adresár.
Adresár 32-bitového systému Windows NT.
Adresár 16-bitového systému Windows NT.
Domovský adresár Windows NT.
Adresáre uvedené v ceste.

Aby bolo možné spustiť príkazy vo formáte shell ako dir a copy , volajúci musí predpísať `` cmd.exe / c '' na požadovaný príkaz.

Windows 95

Pri pokuse o spustenie aplikácie vykoná najprv vyhľadávanie pre meno, ako bolo zadané. Potom sa do príkazu .com , .exe a .bat pripojí koniec zadaného názvu a hľadá dlhšie meno. Ak nebol zadaný názov adresára ako súčasť názvu aplikácie, pri vyhľadávaní aplikácie sa automaticky hľadajú nasledujúce adresáre:

Adresár, z ktorého bol načítaný spustiteľný súbor Tcl.
Aktuálny adresár.
Adresár systému Windows 95.
Domovský adresár systému Windows 95.
Adresáre uvedené v ceste.

Aby bolo možné vykonať príkazy vo formáte shell ako dir a copy , volajúci musí predpísať ` command.com / c '' na požadovaný príkaz.

Akonáhle 16-bitová aplikácia DOS čítal štandardný vstup z konzoly a potom ukončil, všetky následne spustené 16-bitové aplikácie DOS uvidia štandardný vstup ako už uzavretý. 32-bitové aplikácie nemajú tento problém a budú fungovať správne, aj keď 16-bitová aplikácia DOS si myslí, že štandardný vstup je zatvorený. Momentálne nie je známe žiadne riešenie tejto chyby.

Presmerovanie medzi zariadením NUL: a 16-bitovou aplikáciou nefunguje vždy. Pri presmerovaní z NUL: niektoré aplikácie môžu visieť, iné získajú nekonečný prúd `` 0x01 '' bajtov a niektoré skutočne správne získajú okamžitý koniec súboru; správanie sa zdá závisieť od niečoho, čo sa skompiluje do samotnej aplikácie. Ak presmerujete viac ako 4K alebo viac na hodnotu NUL: niektoré aplikácie budú visieť. Vyššie uvedené problémy sa nevyskytujú pri 32-bitových aplikáciách.

Všetky 16-bitové aplikácie DOS sa spúšťajú synchronne. Všetky štandardné vstupy z potrubia do 16-bitovej aplikácie DOS sa zhromažďujú do dočasného súboru. druhý koniec potrubia musí byť zatvorený pred spustením 16-bitovej aplikácie DOS. Všetky štandardné výstupy alebo chyby zo 16-bitovej aplikácie DOS na potrubie sa zhromažďujú do dočasných súborov. aplikácia musí byť ukončená skôr, než budú dočasné súbory presmerované do ďalšej fázy potrubia. Je to spôsobené riešením chyby systému Windows 95 pri implementácii potrubia a je to, ako štandardný systém Windows 95 DOS shell spracováva potrubia sám.

Niektoré aplikácie, napríklad command.com , by sa nemali vykonávať interaktívne. Aplikácie, ktoré priamo pristupujú k oknu konzoly, môžu skôr než čítať zo svojho štandardného vstupu a zápisu do štandardného výstupu, môžu zlyhať, zavesiť Tcl alebo zavesiť systém, ak ich vlastné okno súkromnej konzoly nie je k dispozícii.

nepremokavý plášť

Príkaz exec nie je implementovaný a neexistuje v systéme Macintosh.

unix

Príkaz exec je plne funkčný a pracuje tak, ako je popísané.

Pozri tiež

chyba (n), otvorená (n)

Kľúčové slová

spustiť, potrubie, presmerovanie, podproces

Dôležité: Pomocou príkazu man ( % man ) môžete zistiť, ako sa príkaz používa vo vašom konkrétnom počítači.