exec - Invocarea subproceselor
Rezumat
Exec? întrerupătoare ? arg ? arg … ?
Descriere
Această comandă tratează argumentele sale ca specificație a uneia sau mai multor subprocese de executat. Argumentele iau forma unei conducte standard în care fiecare arg devine un cuvânt al unei comenzi și fiecare comandă distinctă devine o subproces.
Dacă argumentele inițiale laExec începe cu- atunci acestea sunt tratate ca switch-uri de linie de comandă și nu fac parte din specificațiile conductei. Următoarele comutatoare sunt acceptate în prezent:
-keepnewline
Păstrează o nouă linie trasată în ieșirea conductei. În mod normal, o linie nouă va fi ștearsă.
--
Marchează sfârșitul comutatoarelor. Argumentul următor va fi tratat ca primul arg chiar dacă începe cu a-.
Daca un arg (sau pereche de arg (e) are una din formele descrise mai jos, apoi este utilizată de cătreExec pentru a controla fluxul de intrări și ieșiri între subprocesele (subprocesele). Astfel de argumente nu vor fi transmise subproceselor. În forme precum `` < nume de fișier '' nume de fișier poate fi fie într-un argument separat de la `` '', fie în același argument, fără spațiu intervenit (adică `` < nume de fișier '').
|
Separă comenzile distincte din conductă. Ieșirea standard a comenzii precedente va fi introdusă în intrarea standard a următoarei comenzi.
|&
Separă comenzile distincte din conductă. Atât outputul standard, cât și eroarea standard a comenzii precedente vor fi introduse în intrarea standard a următoarei comenzi. Această formă de redirecționare înlocuiește forme precum 2> și>.
< nume de fișier
Fișierul numit de nume de fișier este deschis și folosit ca intrare standard pentru prima comandă în conductă.
<@ fileId
FileId trebuie să fie identificatorul unui fișier deschis, cum ar fi valoarea returnată de la un apel anterior ladeschis. Se utilizează ca intrare standard pentru prima comandă din conductă. FileId trebuie să fi fost deschisă pentru citire.
<< valoare
Valoare este trecut la prima comandă ca intrare standard.
> nume de fișier
Ieșirea standard din ultima comandă este redirecționată către fișierul numit nume de fișier , suprascriind conținutul său anterior.
2> nume de fișier
Eroare standard din toate comenzile din conductă este redirecționată către fișierul numit nume de fișier , suprascriind conținutul său anterior.
>& nume de fișier
Ambele ieșiri standard de la ultima comandă și eroarea standard din toate comenzile sunt redirecționate către fișierul numit nume de fișier , suprascriind conținutul său anterior.
>> nume de fișier
Ieșirea standard din ultima comandă este redirecționată către fișierul numit nume de fișier , adăugându-se în loc să o suprascrie.
2>> nume de fișier
Eroare standard din toate comenzile din conductă este redirecționată către fișierul numit nume de fișier , adăugându-se în loc să o suprascrie.
>>& nume de fișier
Ambele ieșiri standard de la ultima comandă și eroarea standard din toate comenzile sunt redirecționate către fișierul numit nume de fișier , adăugându-se în loc să o suprascrie.
>@ fileId
FileId trebuie să fie identificatorul unui fișier deschis, cum ar fi valoarea returnată de la un apel anterior ladeschis. Emisia standard din ultima comandă este redirecționată către fileId care ar fi trebuit să fie deschis pentru scriere.
2>@ fileId
FileId trebuie să fie identificatorul unui fișier deschis, cum ar fi valoarea returnată de la un apel anterior ladeschis. Eroare standard din toate comenzile din conductă este redirecționată către fileId 's dosarul. Fișierul trebuie să fi fost deschis pentru scriere.
>&@ fileId
FileId trebuie să fie identificatorul unui fișier deschis, cum ar fi valoarea returnată de la un apel anterior ladeschis. Ambele ieșiri standard din ultima comandă și eroarea standard din toate comenzile sunt redirecționate către fileId 's dosarul. Fișierul trebuie să fi fost deschis pentru scriere.
Dacă ieșirea standard nu a fost redirecționată, atunciExec comanda returnează ieșirea standard din ultima comandă din conductă. Dacă oricare dintre comenzile din conductă iese anormal sau sunt ucise sau suspendate, atunciExec va returna o eroare și mesajul de eroare va include ieșirea conductei urmată de mesaje de eroare care descriu terminările anormale;cod de eroare variabila va conține informații suplimentare despre ultima terminare anormală întâlnită. Dacă oricare dintre comenzi scrie la fișierul de eroare standard și această eroare standard nu este redirecționată, atunciExec va întoarce o eroare; mesajul de eroare va include ieșirea standard a conductei, urmată de mesaje despre terminalele anormale (dacă există), urmată de ieșirea standard a erorii.
Dacă ultimul caracter al rezultatului sau al mesajului de eroare este o linie nouă, atunci acel caracter este în mod normal șters din rezultatul mesajului de eroare. Acest lucru este în concordanță cu alte valori de întoarcere Tcl, care în mod normal nu se termină cu linii noi. Cu toate acestea, dacă-keepnewline este specificată atunci linia de linie nouă este reținută.
Dacă intrarea standard nu este redirecționată cu `` <'' sau `` '' sau `` <@ '' atunci intrarea standard pentru prima comandă din conductă este luată din intrarea standard curentă a aplicației.
Dacă ultimul arg este `` & '', atunci conducta va fi executată în fundal. În acest cazExeccomanda va returna o listă a cărei elemente sunt identificatorii de proces pentru toate subprocesele din conductă.Ieșirea standard din ultima comandă din conductă va merge la ieșirea standard a aplicației dacă nu a fost redirecționată, iar ieșirea de eroare de la toate comenzile din conductă va ajunge la fișierul de eroare standard al aplicației dacă nu este redirecționat.
Primul cuvânt din fiecare comandă este luat ca nume de comandă; substituția tilde se efectuează pe ea și dacă rezultatul nu conține slăburi atunci directoarele din variabila de mediu PATH sunt căutate pentru un executabil de numele dat. Dacă numele conține o slash, atunci trebuie să se refere la un executabil accesibil din directorul curent. Nu se efectuează nici o extensie globală sau alte substituții asemănătoare cu shell-urile pe argumentele comenzilor.
Probleme legate de portabilitate
ferestre (toate versiunile)
Citirea de la sau scrierea la un soclu, utilizând butonul "`@ fileId '' notație, nu funcționează. Când citiți de la un soclu, o aplicație DOS pe 16 biți se va agăța și o aplicație pe 32 de biți se va întoarce imediat cu sfârșitul fișierului. Când un tip de aplicație scrie într-o socket, informațiile sunt trimise în consola, dacă este prezentă sau este aruncată.
Widget-ul de text pentru consola Tk nu oferă capabilități reale standard IO. Sub Tk, atunci când se redirecționează de la intrarea standard, toate aplicațiile vor vedea un sfârșit de fișier imediat; informațiile redirecționate la ieșirea standard sau la eroarea standard vor fi ignorate.
Fie slash-urile înainte sau înapoi sunt acceptate ca separatoare de cale pentru argumentele comenzilor Tcl. Atunci când executați o aplicație, numele căii specificat pentru aplicație poate conține, de asemenea, tăieturi înainte sau înapoi ca separatoare de traseu. Rețineți, totuși, că majoritatea aplicațiilor Windows acceptă argumente cu limite de avans doar ca delimitatoare de opțiuni și backslash-uri numai în căi. Orice argumente pentru o aplicație care specifică un nume de cale cu slash-uri înainte nu vor fi convertite automat pentru a utiliza caracterul invers. Dacă un argument conține slăbiciuni înainte ca separator de cale, acesta poate sau nu să fie recunoscut ca un nume de cale, în funcție de program.
În plus, atunci când apelați o aplicație DOS pe 16 biți sau o aplicație Windows 3.X, toate denumirile de căi trebuie să utilizeze formatul cale scurtă, criptică (de exemplu, folosind `` applba ~ 1.def '' în loc de `` applbakery.default '' ).
Două sau mai multe tălpi înainte sau înapoi într-un rând într-o cale se referă la o cale de rețea. De exemplu, o simplă concatenare a directorului rădăcinăc: / cu un subdirector/ Ferestre / sistem va da randamentc: // ferestre / sistem (două tăișuri împreună), care se referă la punctul de montare numitsistem pe mașina numităferestre (sic: / este ignorată) și nu este echivalentă cuc: / ferestre / sistem, care descrie un director pe calculatorul curent.fișier join comanda ar trebui folosită pentru a concatena componentele căii.
Windows NT
Când încercați să executați o aplicație,Exec prima căutări pentru nume așa cum a fost specificat. Apoi, în ordine,.com, .executabil, și.băţ sunt atașate la sfârșitul numelui specificat și caută numele mai lung. Dacă un nume de director nu a fost specificat ca parte a numelui aplicației, următoarele directoare sunt căutate automat în ordine când încercați să localizați aplicația:
Directorul din care a fost încărcat executabilul Tcl.Directorul curent.Directorul de sistem pe 32 de biți Windows NT.Directorul sistem Windows NT pe 16 biți.Directorul de domiciliu Windows NT.Directoarele afișate în cale. Pentru a executa comenzile shell builtin cum ar fidir șicopie, apelantul trebuie să predea "cmd.exe / c'' la comanda dorită. Windows 95 Când încercați să executați o aplicație,Exec prima căutări pentru nume așa cum a fost specificat. Apoi, în ordine,.com, .executabil, și.băţ sunt atașate la sfârșitul numelui specificat și caută numele mai lung. Dacă un nume de director nu a fost specificat ca parte a numelui aplicației, următoarele directoare sunt căutate automat în ordine când încercați să localizați aplicația: Directorul din care a fost încărcat executabilul Tcl.Directorul curent.Directorul de sistem Windows 95.Directorul de domiciliu Windows 95.Directoarele afișate în cale. Pentru a executa comenzile shell builtin cum ar fidir șicopie, apelantul trebuie să predea "command.com / c'' la comanda dorită. Odată ce o aplicație DOS pe 16 biți a citit o intrare standard de la o consolă și apoi a ieșit, toate ulterior, aplicațiile DOS de 16 biți vor vedea intrarea standard ca fiind deja închisă. Aplicațiile pe 32 de biți nu au această problemă și vor funcționa corect, chiar și după ce o aplicație DOS pe 16 biți consideră că intrarea standard este închisă. Nu există nici o soluție cunoscută pentru acest bug în acest moment. Redirecționarea întreNUL: dispozitiv și o aplicație pe 16 biți nu funcționează întotdeauna. Când redirecționați de laNUL:, unele aplicații pot să se blocheze, altele vor primi un flux infinit de octeți `` 0x01 '', iar unii vor primi de fapt un sfârșit de fișier imediat; comportamentul pare să depindă de ceva compilat în aplicația în sine. Când redirecționați mai mult de 4K sau cam asa cevaNUL:, unele aplicații se vor închide. Problemele de mai sus nu se întâmplă în cazul aplicațiilor pe 32 de biți. Toate aplicațiile DOS pe 16 biți sunt executate în mod sincron. Toate intrările standard de la o țeavă la o aplicație DOS de 16 biți sunt colectate într-un fișier temporar; celălalt capăt al țevii trebuie închis înainte ca aplicația DOS pe 16 biți să înceapă să execute.Orice ieșire standard sau eroare de la o aplicație DOS de 16 biți la o țeavă este colectată în fișiere temporare; aplicația trebuie să se termine înainte ca fișierele temporare să fie redirecționate către următoarea etapă a conductei. Acest lucru se datorează unei soluții de rezolvare a unei erori Windows 95 în implementarea țevilor și este modul în care cofrajele standard Windows 95 DOS se ocupă chiar de conductele. Anumite aplicații, cum ar ficommand.com, nu ar trebui să fie executate interactiv. Aplicațiile care accesează direct fereastra consolei, în loc să citească de la intrarea și scrierea lor standard la ieșirea lor standard, pot să nu reușească, să blocheze Tcl sau chiar să blocheze sistemul dacă fereastra consolei lor private nu le este disponibilă. Macintosh Exec comanda nu este implementată și nu există sub Macintosh. Unix Exec comandă este pe deplin funcțională și funcționează așa cum este descris. eroare (n), deschisă (n) execuție, conducte, redirecționare, subproces Important: Folosește om comandă ( % om ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular. Vezi si
Cuvinte cheie




