Exec - Comando de Linux - Comando Unix

exec - Invoque subprocessos (es)

Sinopsi

exec ? commuta ? 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 cada argenta es converteix en una paraula d'un comandament, i cada ordre diferent es converteix en un subprocés.

Si comencen els arguments inicials per executar - llavors es tracten com a commutadors de línia de comanda 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, tot i que comenci per a - .

Si un arg (o parell de arg ) té un dels formularis descrits a continuació, s'utilitza per executar per controlar el flux d'entrada i sortida entre els subprocessos. Aquests arguments no es transmetran al subprocés. En formularis com el fitxer `` < fileName '', el nom del fitxer pot estar en un argument separat de `` <'' o en el mateix argument sense espai intermedi (és a dir, `` < nombreDeFileName '').

|

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 del fitxer

El fitxer designat per fileName s'obre i s'utilitza com a entrada estàndard per al primer comandament del canal.

<@ fileId

FileId ha de ser l'identificador d'un fitxer obert, com ara el valor retornat d'una trucada anterior per obrir . S'utilitza com a entrada estàndard per al primer comandament del canal. El fitxer s'ha d'haver obert per llegir.

Valor <<

El valor es passa a la primera comanda com a entrada estàndard.

> nom del fitxer

La sortida estàndard de l'última ordre es redirigeix ​​al fitxer anomenat FileName , sobreescrivint els seus continguts anteriors.

2> nom del fitxer

L'error estàndard de tots els comandaments en la canonada es redirigeix ​​al fitxer anomenat FileName , sobreescrivint els seus continguts anteriors.

> & nom del fitxer

Tant la sortida estàndard de l'última comanda com l'error estàndard de tots els comandaments es redirigeixen al fitxer anomenat FileName , sobreescrivint els seus continguts previs.

>> nom del fitxer

La sortida estàndard de l'última ordre es redirigeix ​​al fitxer anomenat FileName , que s'afegeix a ell en comptes de sobreescribir-lo.

2 >> nom del fitxer

L'error estàndard de tots els comandaments del canal es redirigeix ​​al fitxer anomenat FileName , que s'afegeix a ell en comptes de sobreescribir-lo.

>> & nom del fitxer

Tant la sortida estàndard de l'última comanda com l'error estàndard de tots els comandaments es redirigeixen al fitxer anomenat FileName , que s'afegeix a ell en comptes de sobreescriure-la.

> @ fileId

FileId ha de ser l'identificador d'un fitxer obert, com ara el valor retornat d'una trucada anterior per obrir . La sortida estàndard de l'última ordre es redirigeix ​​al fitxer del fitxer, 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 per obrir . L'error estàndard de tots els comandaments en la canonada es redirigeix ​​al fitxer d'arxiu. 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 per obrir . Tant la sortida estàndard de l'última comanda com l'error estàndard de tots els comandaments es redirigeixen al fitxer d'arxiu. El fitxer s'ha d'haver obert per escriure.

Si la sortida estàndard no ha estat redirigida, llavors la comanda exec rebrà la sortida estàndard de l'últim comandament del canal. Si alguna de les ordres en la canonada surt anormalment o són assassinades o suspeses, l' executor retornarà un error i el missatge d'error inclourà la sortida de la canonada seguit de missatges d'error que descriuen les terminacions anormals; la variable errorCode contindrà informació addicional sobre l'última cancel·lació anormal trobada. Si alguna de les ordres escriu al seu fitxer d'error estàndard i que l'error estàndard no és redirigit, l' executor 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. Tanmateix, si s'especifica -keepnewline , es manté la nova línia final.

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 el darrer arg és `` & '', el gasoducte s'executarà en segon pla. En aquest cas, l'ordre exec retornarà una llista els elements dels quals són identificadors de processos per a tots els subprocessos que hi ha 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)

Llegir des de o escriure en un sòcol, utilitzant la notació `` @ fileId '', 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 concatenació senzilla del directori arrel c: / amb un subdirectori / sistema windows / obtindrà c: // windows / system (dues barres unides), que fa referència al punt de muntatge anomenat sistema a la màquina anomenat windows (i el c: / és ignorat), i no és equivalent al c: / windows / system , que descriu un directori en l'equip actual. L'ordre file join s'ha d'usar per concatenar els components de la ruta.

Windows NT

En intentar executar una aplicació, exec primer busca el nom tal com s'ha especificat. A continuació, en ordre, .com , .exe i .bat s'afegeixen al final del nom especificat i es busca 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 les ordres integrades en shell com ara dir i copiar , l'autor de trucades ha de prémer `` cmd.exe / c '' a l'ordre desitjada.

Windows 95

En intentar executar una aplicació, exec primer busca el nom tal com s'ha especificat. A continuació, en ordre, .com , .exe i .bat s'afegeixen al final del nom especificat i es busca 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 les ordres integrades en shell com ara dir i copiar , l'anomenat ha de prémer « command.com / c » a l'ordre 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.

La redirecció entre NUL: el dispositiu i una aplicació de 16 bits no sempre funciona. Quan es torna a redireccionar des de NUL: algunes aplicacions poden passar, 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 redirigeixi més de 4K o més a NUL:, 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 command.com , no s'han 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

La comanda exec no està implementada i no existeix a Macintosh.

Unix

L'ordre exec és totalment funcional i funciona tal com s'ha descrit.

Vegeu també

error (n), obert (n)

Paraules clau

executar, pipeline, redirecció, subprocessos

Important: utilitzeu l'ordre man ( % home ) per veure com s'utilitza una comanda a l'ordinador en particular.