exec - Subproces (sen) aanroepen
Korte inhoud
exec? switches ? arg ? arg … ?
Omschrijving
Met deze opdracht worden de argumenten behandeld als de specificatie van een of meer subprocessen die moeten worden uitgevoerd. De argumenten hebben de vorm van een standaard shell-pijplijn waarbij elk arg wordt één woord van een commando en elk afzonderlijk commando wordt een subproces.
Als de eerste argumenten voorexec beginnen met- vervolgens worden ze behandeld als opdrachtregelschakelaars en maken ze geen deel uit van de pijplijnspecificatie. De volgende switches worden momenteel ondersteund:
-keepnewline
Behoudt een nieuwe lijn in de uitvoer van de pipeline. Normaal gesproken wordt een nieuwe regel verwijderd.
--
Markeert het einde van schakelaars. Het volgende argument zal als eerste worden behandeld arg zelfs als het begint met een-.
Als een arg (of paar arg 's) heeft een van de hieronder beschreven vormen en wordt vervolgens gebruikt doorexec om de stroom van input en output tussen de subprocessen te regelen. Dergelijke argumenten worden niet doorgegeven aan het subproces (sen). In vormen zoals `` < bestandsnaam '' bestandsnaam kan in een afzonderlijk argument staan van `` <'' of in hetzelfde argument zonder tussenliggende spatie (d.w.z. `` < bestandsnaam '').
|
Scheidt verschillende opdrachten in de pijplijn. De standaarduitgang van de voorgaande opdracht wordt doorgesluisd naar de standaardinvoer van de volgende opdracht.
|&
Scheidt verschillende opdrachten in de pijplijn. Zowel de standaarduitgang als de standaardfout van het voorgaande commando worden doorgesluisd naar de standaardinvoer van het volgende commando. Deze vorm van omleiding vervangt vormen zoals 2> en> &.
< bestandsnaam
Het bestand met de naam bestandsnaam wordt geopend en gebruikt als standaardinvoer voor de eerste opdracht in de pijplijn.
<@ fileId
fileId moet de ID zijn voor een geopend bestand, zoals de retourwaarde van een vorige aanroep naarOpen. Het wordt gebruikt als standaardinvoer voor het eerste commando in de pijplijn. fileId moet zijn geopend om te lezen.
<< waarde
Waarde wordt doorgegeven aan de eerste opdracht als standaardinvoer.
> bestandsnaam
Standaarduitvoer van de laatste opdracht wordt omgeleid naar het bestand met de naam bestandsnaam , overschrijft de vorige inhoud.
2> bestandsnaam
Standaardfout van alle opdrachten in de pijplijn wordt omgeleid naar het bestand met de naam bestandsnaam , overschrijft de vorige inhoud.
>& bestandsnaam
Zowel de standaarduitvoer van de laatste opdracht als de standaardfout van alle opdrachten worden omgeleid naar het genoemde bestand bestandsnaam , overschrijft de vorige inhoud.
>> bestandsnaam
Standaarduitvoer van de laatste opdracht wordt omgeleid naar het bestand met de naam bestandsnaam , eraan toevoegen in plaats van het te overschrijven.
2>> bestandsnaam
Standaardfout van alle opdrachten in de pijplijn wordt omgeleid naar het bestand met de naam bestandsnaam , eraan toevoegen in plaats van het te overschrijven.
>>& bestandsnaam
Zowel de standaarduitvoer van de laatste opdracht als de standaardfout van alle opdrachten worden omgeleid naar het genoemde bestand bestandsnaam , eraan toevoegen in plaats van het te overschrijven.
>@ fileId
fileId moet de ID zijn voor een geopend bestand, zoals de retourwaarde van een vorige aanroep naarOpen. Standaarduitvoer van de laatste opdracht wordt omgeleid naar fileId het bestand, dat moet zijn geopend om te schrijven.
2>@ fileId
fileId moet de ID zijn voor een geopend bestand, zoals de retourwaarde van een vorige aanroep naarOpen. Standaardfout van alle opdrachten in de pijplijn wordt omgeleid naar fileId bestand. Het bestand moet geopend zijn om te schrijven.
>&@ fileId
fileId moet de ID zijn voor een geopend bestand, zoals de retourwaarde van een vorige aanroep naarOpen. Zowel de standaarduitvoer van de laatste opdracht als de standaardfout van alle opdrachten worden omgeleid naar fileId bestand. Het bestand moet geopend zijn om te schrijven.
Als de standaarduitvoer niet is omgeleid, dan is deexec commando retourneert de standaarduitvoer van de laatste opdracht in de pijplijn. Als een van de opdrachten in de pijplijn abnormaal eindigt of wordt gedood of opgeschort, danexec retourneert een fout en het foutbericht bevat de uitvoer van de pipeline gevolgd door foutmeldingen die de abnormale beëindigingen beschrijven; defoutcode variabele zal aanvullende informatie bevatten over de laatst aangetroffen abnormale beëindiging. Als een van de opdrachten naar het standaard foutbestand schrijft en die standaardfout niet wordt omgeleid, danexec zal een fout retourneren; het foutbericht bevat de standaarduitvoer van de pipeline, gevolgd door berichten over abnormale beëindigingen (indien aanwezig), gevolgd door de standaardfoutuitvoer.
Als het laatste teken van het resultaat of de foutmelding een nieuwe regel is, wordt dat teken gewoonlijk uit het resultaat of de foutmelding verwijderd. Dit is consistent met andere Tcl-retourwaarden, die normaal niet eindigen met nieuwe regels. Echter, als-keepnewline is opgegeven, dan blijft de volgende nieuwe regel behouden.
Als de standaardinvoer niet wordt omgeleid met `` <'' of `` << '' of `` <@ '', wordt de standaardinvoer voor de eerste opdracht in de pipeline overgenomen van de huidige standaardinvoer van de toepassing.
Als de laatste arg is `` & '', dan wordt de pijplijn op de achtergrond uitgevoerd. In dit geval deexeccommando zal een lijst retourneren waarvan de elementen de proces-ID's zijn voor alle subprocessen in de pijplijn.De standaarduitvoer van de laatste opdracht in de pijplijn gaat naar de standaarduitvoer van de toepassing als deze niet is omgeleid en de foutuitvoer van alle opdrachten in de pijplijn gaat naar het standaardfoutbestand van de toepassing tenzij omgeleid.
Het eerste woord in elke opdracht wordt genomen als de opdrachtnaam; tilde-substitutie wordt erop uitgevoerd en als het resultaat geen schuine strepen bevat, worden de mappen in de omgevingsvariabele PATH opgezocht voor een uitvoerbaar bestand met de opgegeven naam. Als de naam een schuine streep bevat, moet deze verwijzen naar een uitvoerbaar bestand dat bereikbaar is vanuit de huidige map. Geen `` glob '' uitbreiding of andere shell-achtige substituties worden uitgevoerd op de argumenten voor opdrachten.
Problemen met de draagbaarheid
ramen (alle versies)
Lezen van of schrijven naar een socket, met behulp van de ``@ fileId '' notatie, werkt niet. Bij het lezen van een socket hangt een 16-bits DOS-toepassing en een 32-bits toepassing keert onmiddellijk terug met het einde van het bestand. Wanneer beide soorten toepassingen naar een socket schrijven, wordt de informatie in plaats daarvan naar de console verzonden, als er een aanwezig is of wordt weggegooid.
De Tk-teksttoolwidget biedt geen echte standaard IO-mogelijkheden. Onder Tk zullen bij het omleiden van standaardinvoer alle toepassingen een onmiddellijk einde van het bestand te zien krijgen; informatie omgeleid naar standaarduitvoer of standaardfout zal worden genegeerd.
Voorwaartse of achterwaartse slashes worden geaccepteerd als padscheidingstekens voor argumenten naar Tcl-opdrachten. Bij het uitvoeren van een toepassing kan de padnaam die voor de toepassing is gespecificeerd, ook schuine strepen naar voren of naar achteren bevatten als scheidingstekens voor paden. Houd er echter rekening mee dat de meeste Windows-toepassingen alleen argumenten in slashes accepteren als scheidingstekens voor opties en backslashes alleen in paden. Alle argumenten voor een toepassing die een padnaam met slashes opgeeft, worden niet automatisch geconverteerd om het backslash-teken te gebruiken. Als een argument snedeaanwijzingen als het padscheidingsteken bevat, kan het al dan niet worden herkend als padnaam, afhankelijk van het programma.
Bovendien moeten bij het aanroepen van een 16-bits DOS- of Windows 3.X-toepassing alle padnamen het korte, cryptische padformaat gebruiken (bijv. Met `` applba ~ 1.def '' in plaats van `` applbakery.default '' ).
Twee of meer voorwaartse of achterwaartse slashes in een rij in een pad verwijzen naar een netwerkpad. Bijvoorbeeld een eenvoudige aaneenschakeling van de hoofdmapc: / met een submap/ Windows / system zal opbrengenc: // windows / system (twee schuine strepen samen), die verwijst naar het genoemde mount-puntsysteem op de machine genaamdramen (en dec: / wordt genegeerd) en is niet hetzelfde alsc: / windows / system, dat een map op de huidige computer beschrijft. Debestand join commando moet worden gebruikt om padcomponenten samen te voegen.
Windows NT
Wanneer u probeert een toepassing uit te voeren,exec zoekt eerst de naam zoals deze was opgegeven. Dan, in volgorde,.com, .exe, en.knuppel worden toegevoegd aan het einde van de opgegeven naam en wordt gezocht naar de langere naam. Als er geen mapnaam is opgegeven als onderdeel van de naam van de toepassing, worden de volgende mappen automatisch opgezocht wanneer ze proberen de toepassing te vinden:
De map waaruit het Tcl-uitvoerbare bestand is geladen.De huidige map.De 32-bits systeemdirectory van Windows NT.De Windows NT 16-bits systeemdirectory.De thuismap van Windows NT.De mappen die in het pad worden vermeld. Om de shell ingebouwde commando's zoals uit te voerendir enkopiëren, de beller moet `` gebruikencmd.exe / c'' naar het gewenste commando. Windows 95 Wanneer u probeert een toepassing uit te voeren,exec zoekt eerst de naam zoals deze was opgegeven. Dan, in volgorde,.com, .exe, en.knuppel worden toegevoegd aan het einde van de opgegeven naam en wordt gezocht naar de langere naam. Als er geen mapnaam is opgegeven als onderdeel van de naam van de toepassing, worden de volgende mappen automatisch opgezocht wanneer ze proberen de toepassing te vinden: De map waaruit het Tcl-uitvoerbare bestand is geladen.De huidige map.De systeemmap van Windows 95.De thuismap van Windows 95.De mappen die in het pad worden vermeld. Om de shell ingebouwde commando's zoals uit te voerendir enkopiëren, de beller moet `` gebruikencommand.com / c'' naar het gewenste commando. Zodra een 16-bits DOS-toepassing de standaardinvoer van een console heeft gelezen en vervolgens is gestopt, zullen alle daaropvolgende 16-bits DOS-toepassingen de standaardinvoer zien als reeds gesloten. 32-bits toepassingen hebben dit probleem niet en zullen correct worden uitgevoerd, zelfs nadat een 16-bits DOS-toepassing denkt dat de standaardinvoer is gesloten. Er is op dit moment geen oplossing voor dit probleem bekend. Doorverwijzing tussen deNUL: apparaat en een 16-bits toepassing werkt niet altijd. Bij het omleiden vanNUL:, sommige applicaties kunnen vastlopen, anderen krijgen een oneindige stroom van `` 0x01 '' bytes, en sommige zullen juist een onmiddellijk einde van het bestand krijgen; het gedrag lijkt af te hangen van iets dat is gecompileerd in de applicatie zelf. Bij het omleiden van meer dan 4K of zo naarNUL:, sommige applicaties zullen blijven hangen. Bovenstaande problemen doen zich niet voor bij 32-bit-applicaties. Alle DOS 16-bit-toepassingen worden synchroon uitgevoerd. Alle standaardinvoer van een pipe naar een 16-bits DOS-toepassing wordt verzameld in een tijdelijk bestand; het andere uiteinde van de pijp moet worden gesloten voordat de 16-bits DOS-toepassing begint te worden uitgevoerd.Alle standaarduitvoer of fouten van een 16-bits DOS-toepassing naar een pipe worden verzameld in tijdelijke bestanden; de toepassing moet worden beëindigd voordat de tijdelijke bestanden worden omgeleid naar de volgende fase van de pijplijn. Dit is het gevolg van een tijdelijke oplossing voor een Windows 95-bug bij de implementatie van pipes, en is hoe de standaard Windows 95 DOS-shell de buizen zelf behandelt. Bepaalde applicaties, zoalscommand.com, moet niet interactief worden uitgevoerd. Toepassingen die rechtstreeks toegang hebben tot het consolevenster, in plaats van te lezen van hun standaardinvoer en schrijven naar hun standaarduitvoer, kunnen falen, Tcl ophangen of zelfs het systeem ophangen als hun eigen privéconsolevenster niet voor hen beschikbaar is. regenjas Deexec commando is niet geïmplementeerd en bestaat niet onder Macintosh. Unix Deexec opdracht is volledig functioneel en werkt zoals beschreven. error (n), open (n) uitvoeren, pijplijn, omleiding, subproces Belangrijk: Gebruik de man commando ( % man ) om te zien hoe een opdracht wordt gebruikt op uw specifieke computer. Zie ook
trefwoorden




