exec - Invoque subprocessos (es)
Sinopsi
exec? interruptors ? arg ? arg … ?
Descripció
Aquesta comanda tracta els seus arguments com l'especificació d'un o més subprocessos per executar. Els arguments prenen la forma d'un oleoducte estàndard on cadascun d'ells arg es converteix en una paraula d'un comandament, i cada comanda diferent es converteix en un subprocés.
Si els arguments inicials aexec començar amb- llavors es tracten com a commutadors de la línia de comandaments i no formen part de l'especificació de la canonada. Els següents commutadors són compatibles actualment:
-keepnewline
Manté una nova línia final a la sortida del canal. Normalment se suprimirà una nova línia final.
--
Marca el final dels interruptors. L'argument següent a aquest es tractarà com el primer arg fins i tot si comença per a-.
Si un arg (o un parell de arg 's) té una de les formes que es descriuen a continuació, la utilitzaexec per controlar el flux d'entrada i sortida entre els subprocessos. Aquests arguments no es transmetran al subprocés. En formularis com `` < nom de l'arxiu '' nom de l'arxiu pot estar en un argument separat de `` <'' o en el mateix argument sense espai intermedi (és a dir, `` < nom de l'arxiu '').
|
Separa les ordres diferents en la canonada. La sortida estàndard de l'ordre anterior s'incorporarà a l'entrada estàndard de l'ordre següent.
|&
Separa les ordres diferents en la canonada. Tant la sortida estàndard com l'error estàndard de l'ordre anterior es connectaran a l'entrada estàndard del següent comandament. Aquesta forma de redirecció reemplaça formularis com 2> i> &.
< nom de l'arxiu
El fitxer anomenat per nom de l'arxiu s'obre i s'utilitza com a entrada estàndard per al primer comandament que es troba al canal.
<@ fileId
FileId ha de ser l'identificador d'un fitxer obert, com ara el valor retornat d'una trucada anterior aobert. S'utilitza com a entrada estàndard per al primer comandament del canal. FileId s'ha d'haver obert per llegir.
<< valor
Valor es passa al primer comandament com a entrada estàndard.
> nom de l'arxiu
La sortida estàndard de l'última ordre es redirigeix al fitxer anomenat nom de l'arxiu , sobreescrivint els seus continguts anteriors.
2> nom de l'arxiu
L'error estàndard de tots els comandaments del canal es redirigeix al fitxer anomenat nom de l'arxiu , sobreescrivint els seus continguts anteriors.
>& nom de l'arxiu
Tant la sortida estàndard de l'última comanda com l'error estàndard de tots els comandaments es redirigeixen al fitxer anomenat nom de l'arxiu , sobreescrivint els seus continguts anteriors.
>> nom de l'arxiu
La sortida estàndard de l'última ordre es redirigeix al fitxer anomenat nom de l'arxiu , afegint-lo en comptes de sobreescribir-lo.
2>> nom de l'arxiu
L'error estàndard de tots els comandaments del canal es redirigeix al fitxer anomenat nom de l'arxiu , afegint-lo en comptes de sobreescribir-lo.
>>& nom de l'arxiu
Tant la sortida estàndard de l'última comanda com l'error estàndard de tots els comandaments es redirigeixen al fitxer anomenat nom de l'arxiu , afegint-lo en comptes de sobreescribir-lo.
>@ fileId
FileId ha de ser l'identificador d'un fitxer obert, com ara el valor retornat d'una trucada anterior aobert. S'ha redirigit a la sortida estàndard de l'última ordre fileId , que s'ha d'haver obert per escriure.
2>@ fileId
FileId ha de ser l'identificador d'un fitxer obert, com ara el valor retornat d'una trucada anterior aobert. S'ha redirigit a l'error estàndard de tots els comandaments del canal fileId el fitxer. El fitxer s'ha d'haver obert per escriure.
>&@ fileId
FileId ha de ser l'identificador d'un fitxer obert, com ara el valor retornat d'una trucada anterior aobert. Tant la sortida estàndard de l'última comanda com l'error estàndard de tots els comandaments són redirigits a fileId el fitxer. El fitxer s'ha d'haver obert per escriure.
Si la sortida estàndard no s'ha redirigit, llavors laexec comanda retorna la sortida estàndard de l'últim comandament del canal. Si alguna de les ordres de la canonada surt anormalment o són assassinades o suspeses, llavorsexec retornarà un error i el missatge d'error inclourà la sortida de la canonada seguida de missatges d'error que descriuen les anul·lacions anormals; elcodi d'error La variable contindrà informació addicional sobre l'última rescissió anormal trobada. Si alguna de les ordres escriu al seu fitxer d'error estàndard i que l'error estàndard no és redirigit, llavorsexec retornarà un error; el missatge d'error inclourà la sortida estàndard de la canonada, seguit de missatges sobre terminacions anòmals (si n'hi ha), seguit de la sortida d'error estàndard.
Si l'últim caràcter del missatge de resultat o error és una nova línia, aquest caràcter normalment s'elimina del missatge de resultat o d'error. Això és coherent amb altres valors de retorn de Tcl, que normalment no acaben amb línies noves. No obstant això, si-keepnewline s'especifica llavors la nova línia final es manté.
Si l'entrada estàndard no es redirigeix amb `` <'' o `` << '' o `` <@ '', l'entrada estàndard per al primer comandament del canal es pren de l'entrada estàndard actual de l'aplicació.
Si l'últim arg és `` & '' llavors la canonada s'executarà en segon pla. En aquest cas, elexeccommand retornarà una llista els elements són els identificadors de processos per a tots els subprocessos que es troben al canal.La sortida estàndard de l'última ordre al canal es destinarà a la sortida estàndard de l'aplicació si no s'ha redirigit, i l'error de sortida de tots els comandaments del canal anirà al fitxer d'error estàndard de l'aplicació, tret que sigui redirigit.
La primera paraula de cada ordre es pren com a nom de l'ordre; la representació de tilde-substitution es realitza en ell, i si el resultat no conté barres, es busquen els fitxers de la variable d'entorn PATH per un executable pel nom especificat. Si el nom conté una barra inclinada, ha de fer referència a un fitxer executable que es pot obtenir des del directori actual. No es realitza cap ampliació de `` glob '' o altres substitucions com a intèrpret d'ordres en els arguments als comandaments.
Problemes de portabilitat
Windows (totes les versions)
Llegint o escrivint en un sòcol, utilitzant el ``@ fileId '' notació, no funciona. Quan es llegeixi des d'un sòcol, es penjarà una aplicació DOS de 16 bits i una aplicació de 32 bits tornarà immediatament amb l'extrem del fitxer. Quan qualsevol tipus d'aplicació escriu a un sòcol, la informació s'envia a la consola, si es troba o està descartada.
El widget de text de la consola Tk no proporciona capacitats reals d'IO estàndard. A Tk, quan es redirigeix des de l'entrada estàndard, totes les aplicacions veuran un final de fitxer immediat; es descartarà la informació redirigida a la sortida estàndard o a l'error estàndard.
Les barres inclinades cap endavant o cap endavant s'accepten com a separadors de ruta per als arguments a les ordres de Tcl. Quan executeu una aplicació, el nom de la ruta especificat per a l'aplicació també pot incloure barres inclinades cap endavant o cap endavant com a separadors de ruta. Tanmateix, tingueu en compte que la majoria de les aplicacions de Windows accepten arguments amb barres inclinades avançades només com a delimitadores d'opcions i barres inverses només a les rutes. Qualsevol argument d'una aplicació que especifiqui un nom de ruta amb barres inclinades posteriors no es convertirà automàticament per utilitzar el caràcter de barra invertida. Si un argument conté les barres inclinades cap endavant com a separador de ruta, es pot o no es pot reconèixer com a nom de ruta, depenent del programa.
A més, quan truqueu a una aplicació de DOS o Windows 3.X de 16 bits, tots els noms de les rutes han d'utilitzar el format de camí breu i críptic (per exemple, utilitzant `` applba ~ 1.def '' en comptes de `` applbakery.default '' ).
Dues o més barres inclinades cap endavant o cap endavant seguides en una ruta es refereixen a una ruta de xarxa. Per exemple, una simple concatenació del directori arrelc: / amb un subdirectori/ windows / system rendiràc: // windows / system (dues barres al costat), que fa referència al punt de muntatge anomenatsistema a la màquina trucadafinestres (i lac: / s'ignora), i no és equivalent ac: / windows / system, que descriu un directori de l'ordinador actual. Elunir fitxer L'ordre s'ha d'utilitzar per concatenar els components del camí.
Windows NT
Quan intenteu executar una aplicació,exec primer busca el nom tal com s'ha especificat. Després, per tal que,Com, .exe, i.bat s'afegeixen al final del nom especificat i cerca el nom més llarg. Si no s'especifica un nom de directori com a part del nom de l'aplicació, es buscaran automàticament els següents directoris en intentar localitzar l'aplicació:
El directori des del qual es va carregar l'executable Tcl.El directori actual.El directori del sistema de Windows NT de 32 bits.El directori del sistema de 16 bits de Windows NT.El directori d'inici de Windows NT.Els directoris llistats a la ruta. Per executar comandaments incorporats com shelldir icopiar, la persona que truca ha de prémer ``cmd.exe / c'' a la comanda desitjada. Windows 95 Quan intenteu executar una aplicació,exec primer busca el nom tal com s'ha especificat. Després, per tal que,Com, .exe, i.bat s'afegeixen al final del nom especificat i cerca el nom més llarg. Si no s'especifica un nom de directori com a part del nom de l'aplicació, es buscaran automàticament els següents directoris en intentar localitzar l'aplicació: El directori des del qual es va carregar l'executable Tcl.El directori actual.El directori del sistema de Windows 95.El directori personal de Windows 95.Els directoris llistats a la ruta. Per executar comandaments incorporats com shelldir icopiar, la persona que truca ha de prémer ``command.com / c'' a la comanda desitjada. Una vegada que una aplicació de DOS de 16 bits ha llegit l'entrada estàndard des d'una consola i tanca, totes les aplicacions de DOS de 16 bits posteriorment veuran l'entrada estàndard ja que ja està tancada. Les aplicacions de 32 bits no tenen aquest problema i funcionen correctament, fins i tot després que una aplicació DOS de 16 bits pensi que l'entrada estàndard es tanca. No hi ha cap solució coneguda per aquest error en aquest moment. Redirecció entre laNUL: El dispositiu i una aplicació de 16 bits no sempre funcionen. Quan es redirigeix des deNUL:, algunes aplicacions poden penjar; altres tindran un flux infinit de bytes `` 0x01 '', i alguns obtindran correctament un final de fitxer immediat; el comportament sembla dependre d'alguna cosa compilat a la pròpia aplicació. Quan es redirigeix més de 4K o mésNUL:, algunes aplicacions es penjaran. Els problemes anteriors no succeeixen amb les aplicacions de 32 bits. Totes les aplicacions DOS de 16 bits s'executen de forma sincrònica. Totes les entrades estàndard d'una canonada a una aplicació DOS de 16 bits es recopilen en un fitxer temporal; l'altre extrem de la canonada s'ha de tancar abans que comenci a executar l'aplicació de DOS de 16 bits.Tota la sortida estàndard o l'error d'una aplicació DOS de 16 bits a una canonada es recopila en fitxers temporals; l'aplicació ha de finalitzar abans que els fitxers temporals es redirigeixin a la següent etapa de la canonada. Això es deu a una solució temporal per a un error de Windows 95 en la implementació de canonades, i és com l'intèrpret estàndard de Windows 95 DOS maneja les mateixes canonades. Algunes aplicacions, com aracommand.com, no s'ha d'executar de forma interactiva. Les aplicacions que accedeixin directament a la finestra de la consola, en comptes de llegir des de la seva entrada estàndard i escriure a la seva sortida estàndard, poden fallar, penjar Tcl o fins i tot penjar el sistema si la seva pròpia finestra de la consola privada no està disponible per a ells. Macintosh Elexec La comanda no està implementada i no existeix a Macintosh. Unix Elexec L'ordre és totalment funcional i funciona tal com s'ha descrit. error (n), obert (n) executar, pipeline, redirecció, subprocessos Important: Utilitzar el home comandament ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular. Vegeu també
Paraules clau













