Exec - Linux Command - Unix naredba

exec - podproces (i)

Sinopsis

exec ? prekidači ? arg ? arg ... ?

Opis

Ova naredba tretira svoje argumente kao specifikaciju jednog ili više podprocesa za izvršavanje. Argumenti imaju oblik standardne linije cevi, gde svaki arg postaje jedna reč komande, a svaka posebna komanda postaje podproces.

Ako početni argumenti za exec počnu - onda se tretiraju kao prekidači komandne linije i nisu deo specifikacije gasovoda. Trenutno su podržani sljedeći prekidači:

-keepnewline

Zadržava novu liniju na izlazu na gasovodu. Obično će biti izbrisana nova linija.

-

Označava kraj prekidača. Argument koji sledi ovaj će biti tretiran kao prvi argument čak i ako počinje sa - .

Ako arg (ili par arg ) ima jedan od oblika opisanih ispod, onda ga koristi exec za kontrolu protoka ulaza i izlaza između podprocesa (es). Takvi argumenti neće biti prosleđeni podprocesu. U oblicima kao što su `` < fileName '' fileName može biti ili u posebnom argumentu od `` <'' ili u istom argumentu bez interventnog prostora (tj. `` < FileName '').

|

Odvaja različite komande u cjevovodu. Standardni izlaz prethodne komande će se priključiti na standardni ulaz sledeće komande.

| &

Odvaja različite komande u cjevovodu. I standardni izlaz i standardna greška prethodne komande će biti dovedeni u standardni ulaz sledeće komande. Ovaj oblik preusmeravanja preklapa oblike kao što su 2> i> &.

< fileName

Datoteka nazvana by fileName se otvara i koristi kao standardni ulaz za prvu komandu u plinovodu.

<@ fileId

FileId mora biti identifikator za otvorenu datoteku, kao što je povratna vrednost iz prethodnog poziva za otvaranje . Koristi se kao standardni ulaz za prvu komandu u plinovodu. FileId mora biti otvoren za čitanje.

<< vrijednost

Vrednost se prenosi na prvu komandu kao svoj standardni ulaz.

> fileName

Standardni izlaz iz poslednje komande se preusmerava na datoteku pod imenom fileName , prepisujući svoj prethodni sadržaj.

2> fileName

Standardna greška iz svih komandi u plinovodu se preusmerava u datoteku sa imenom fileName , prepisujući svoj prethodni sadržaj.

> & fileName

Oba standardna izlaza iz poslednje komande i standardna greška iz svih komandi su preusmereni na datoteku pod nazivom fileName , prepisujući svoj prethodni sadržaj.

>> fileName

Standardni izlaz iz poslednje komande se preusmerava na datoteku pod imenom fileName , dodajući ga umjesto prepisivanja.

2 >> fileName

Standardna greška iz svih komandi u plinovodu se preusmerava na datoteku pod imenom fileName , dodajući joj više nego prepisivanje.

>> & fileName

Oba standardna izlaza iz poslednje komande i standardna greška iz svih komandi su preusmereni na datoteku sa imenom fileName , dodajući ga umjesto prepisivanja.

> @ fileId

FileId mora biti identifikator za otvorenu datoteku, kao što je povratna vrednost iz prethodnog poziva za otvaranje . Standardni izlaz iz poslednje komande se preusmerava na fileId datoteku, koja mora biti otvorena za pisanje.

2> @ fileId

FileId mora biti identifikator za otvorenu datoteku, kao što je povratna vrednost iz prethodnog poziva za otvaranje . Standardna greška iz svih komandi u plinovodu se preusmerava na fileId datoteku. Datoteka mora biti otvorena za pisanje.

> & @ fileId

FileId mora biti identifikator za otvorenu datoteku, kao što je povratna vrednost iz prethodnog poziva za otvaranje . I standardni izlaz iz poslednje komande i standardne greške iz svih komandi su preusmereni na fileId datoteku. Datoteka mora biti otvorena za pisanje.

Ako standardni izlaz nije preusmeren onda komanda exec vraća standardni izlaz iz poslednje komande u plinovodu. Ako bilo koja komanda u izvodu izlazi neuobičajeno ili je ubijena ili obustavljena, onda će exec vratiti grešku i poruka o grešci će uključiti izlaz cevovoda praćene porukama o grešci koje opisuju abnormalne zaključke; varijabla grešaka će sadržati dodatne informacije o poslednjem abnormalnom prekidu. Ako bilo koja komanda piše u svoju standardnu ​​datoteku grešaka i ta standardna greška nije preusmerena, onda će exec vratiti grešku; poruka o grešci će uključiti standardni izlaz plinovoda, a zatim slijedi poruke o abnormalnim završetkama (ako ih ima), a zatim slijedi standardni izlaz greške.

Ako je poslednji karakter rezultata ili poruke o grešci nova linija, taj znak se obično briše iz rezultata ili poruke o grešci. Ovo je u skladu sa drugim Tcl povratnim vrijednostima, koje se obično ne završavaju sa novim linijama. Međutim, ako je specificirana -new linija, zadnja linija je zadržana.

Ako se standardni unos ne preusmerava sa `` <'' ili `` << '' ili `` <@ '', onda se standardni ulaz za prvu komandu u plinovodu uzima sa trenutnog standardnog ulaza aplikacije.

Ako je poslednji argument `` & '' onda će se gasovod izvršiti u pozadini. U ovom slučaju naredba exec vraća listu čiji su elementi identifikatori procesa za sve podprocese u plinovodu. Standardni izlaz iz poslednje komande u plinovodu će preći na standardni izlaz aplikacije ako nije preusmeren, a izlaz iz greške iz svih komandi u cjevovodu će se preći u standardnu ​​datoteku greške aplikacije, osim ako se ne preusmjeri.

Prva reč u svakoj komandi uzima se kao ime komande; zamjena tilde se vrši na njoj, a ako rezultat ne sadrži kose, onda će direktorijumi u varijanti okoline PATH pretražiti izvršnu datoteku po datom imenu. Ako ime sadrži kosu tačku onda se mora pozivati ​​na izvršnu datoteku koja se može dobiti od trenutnog direktorijuma. Nema ekspanzije `` glob '' ili drugih zamjena na granicama poput argumenata na komande.

Pitanja prenosa

Windows (sve verzije)

Čitanje ili pisanje u soket, koristeći `` @ fileId '' notaciju, ne funkcioniše. Kada čitate iz utičnice, 16-bitna DOS aplikacija će se objesiti i 32-bitna aplikacija će se vratiti odmah sa završetkom datoteke. Kada bilo koja vrsta aplikacije piše u soket, informacije se umesto toga šalju na konzolu, ako je prisutna ili je odbačena.

Tk widget za tekst konzole ne pruža stvarne standardne IO mogućnosti. Pod Tk, kada se preusmerava sa standardnog unosa, sve aplikacije će videti trenutni kraj datoteke; informacije preusmerene na standardni izlaz ili standardnu ​​grešku biće odbačene.

Bilo da se šalju napred ili nazad, prihvaćeni su kao separatori putanja za argumente Tcl naredbama. Kada izvršavate aplikaciju, naziv putanja koji je naveden za aplikaciju takođe može sadržati kašike za napred ili nazad kao separator putanje. Međutim, imajte na umu da većina Windows aplikacija prihvata argumente sa prosleđivanjem sličica samo kao razdjelnik opcije i kravate samo u stazama. Svaki argument za aplikaciju koja navodi ime staze sa kretanjem prosleđivanja neće automatski biti konvertirana da bi se koristio znak backslash-a. Ukoliko argument sadrži slijepe kretanja kao separator putanje, to može ili ne mora biti prepoznato kao ime staze, u zavisnosti od programa.

Pored toga, kada pozivate 16-bitnu DOS ili Windows 3.X aplikaciju, sva imena staza moraju koristiti kratki, šifrirani format (npr., Koristeći `applba ~ 1.def '' umjesto` applbakery.default '' ).

Dve ili više slomova napred ili nazad u nizu na putu odnose se na mrežni put. Na primjer, jednostavno povezivanje korijenskog direktorija c: / sa poddirektorijumom / windows / sistemom datiće c: // windows / system (dvije slashes zajedno), što se odnosi na tačku montiranja koja se zove sistem na mašini koja se zove Windows (i c: / se zanemaruje) i nije ekvivalentan c: / windows / system , koji opisuje direktorij na trenutnom računaru. Komandu pridruživanja datoteke treba koristiti za povezivanje komponenti putanje.

Windows NT

Kada pokušate izvršiti aplikaciju, exec prvo traži ime kako je navedeno. Zatim, u poredak, .com , .exe i .bat se dodaju na kraj navedenog imena i traži duže ime. Ako ime imenika nije naznačeno kao dio imena aplikacije, sledeći direktoriji se automatski pretražuju u redosledu pokušaja lociranja aplikacije:

Direktorijum iz koga je izvedena Tcl izvršna datoteka.
Trenutni direktorijum.
Windows NT 32-bitni sistemski direktorij.
Windows NT 16-bitni sistemski direktorij.
Windows NT home direktorijum.
Direktorijumi navedeni na stazi.

Da bi izvršio komande koje su ugrađene u školu kao što su dir i kopiranje , pozivaoc mora da prikaže `` cmd.exe / c '' u željenu komandu.

Windows 95

Kada pokušate izvršiti aplikaciju, exec prvo traži ime kako je navedeno. Zatim, u poredak, .com , .exe i .bat se dodaju na kraj navedenog imena i traži duže ime. Ako ime imenika nije naznačeno kao dio imena aplikacije, sledeći direktoriji se automatski pretražuju u redosledu pokušaja lociranja aplikacije:

Direktorijum iz koga je izvedena Tcl izvršna datoteka.
Trenutni direktorijum.
Sistemski sistem Windows 95.
Windows 95 home direktorijum.
Direktorijumi navedeni na stazi.

Da bi izvršio šuplje izgrađene komande kao što su dir i kopiranje , pozivaoc mora pripremiti `` command.com / c '' u željenu komandu.

Kada 16-bitna DOS aplikacija ima standardni unos sa konzole i onda odustane, sve kasnije pokretanje 16-bitnih DOS aplikacija će videti standardni ulaz koji je već zatvoren. 32-bitne aplikacije nemaju ovaj problem i pravilno će se pokrenuti, čak i nakon što 16-bitni DOS aplikacija misli da je standardni ulaz zatvoren. U ovom trenutku nije poznato rešenje za ovu grešku.

Preusmeravanje između NUL: uređaja i 16-bitne aplikacije ne funkcioniše uvek. Prilikom preusmeravanja sa NUL: neke aplikacije mogu da vise, ostale će dobiti beskonačni tok bajta `` 0x01 '', a neki će zapravo pravilno dobiti trenutni kraj datoteke; čini se da ponašanje ovisi o nečemu što je sastavljeno u samoj aplikaciji. Kada preusmjerite više od 4K ili tako dalje na NUL: neke aplikacije će visiti. Gore navedeni problemi se ne dešavaju sa 32-bitnim aplikacijama.

Sve DOS 16-bitne aplikacije se pokreću sinhrono. Svi standardni ulazi iz cijevi na 16-bitnu DOS aplikaciju sakupljaju se u privremenu datoteku; drugi kraj cevi mora biti zatvoren pre nego što 16-bitna DOS aplikacija počne sa izvršavanjem. Sva standardna izlazna ili greška iz 16-bitne DOS aplikacije na cijev se sakupljaju u privremene datoteke; aplikacija mora da se prekine pre nego što se privremeni fajlovi preusmeravaju na sledeću fazu plinovoda. Ovo je zbog rešenja za Windows 95 bug u implementaciji cevi, i kako standardna Windows 95 DOS shell lično upravlja cijevima.

Neke aplikacije, kao što je command.com , ne bi trebalo interaktivno izvršavati. Aplikacije koje direktno pristupaju prozoru konzole umesto očitavanja sa njihovog standardnog unosa i pisanja na njihov standardni izlaz mogu da propadnu, obuzmu Tcl ili čak objesite sistem ako njihov prozor za privatnu konzolu nije dostupan.

Macintosh

Komanda exec nije implementirana i ne postoji pod Macintosh-om.

Unix

Komanda exec je u potpunosti funkcionalna i radi kako je opisano.

Vidi Takođe

greška (n), otvorena (n)

Ključne riječi

izvršavanje, cjevovod, preusmeravanje, podproces

Važno: Koristite komandu čovjeka ( % čovjek ) da biste videli kako se na vašem računaru koristi komanda.