Exec - Linux Command - Unix Command

exec - Invoke subprocess (es)

Buod

exec ? switch ? arg ? arg ... ?

Paglalarawan

Ang utos na ito ay tinatrato ang mga argumento nito bilang detalye ng isa o higit pang mga subprocesses na isasagawa. Ang mga argumento ay ang form ng isang standard na tubo ng shell kung saan ang bawat arg ay nagiging isang salita ng isang utos, at ang bawat natatanging utos ay nagiging subprocess.

Kung ang mga unang argumento na magsisimula sa - pagkatapos ay itinuturing na mga switch ng command-line at hindi bahagi ng detalye ng pipeline. Ang kasalukuyang mga switch ay kasalukuyang sinusuportahan:

-keepnewline

Pinapanatili ang isang trailing newline sa output ng tubo. Karaniwan ang isang trailing newline ay tatanggalin.

-

Sinuri ang dulo ng mga switch. Ang argumentong sumusunod sa isang ito ay ituturing bilang unang arg kahit na nagsisimula ito sa isang - .

Kung ang isang Arg (o pares ng arg 's) ay may isa sa mga form na inilarawan sa ibaba pagkatapos ito ay ginagamit ng exec upang makontrol ang daloy ng input at output sa gitna ng subprocess (es). Ang mga naturang argumento ay hindi mapapasa sa subprocess (es). Sa mga form tulad ng file na `` < fileName '' ay maaaring alinman sa isang hiwalay na argumento mula sa `` <'' o sa parehong argument na walang puwang ng intervening (ie `` < fileName '').

|

Ang mga hiwalay na utos sa pipeline. Ang karaniwang output ng naunang utos ay piped sa standard na input ng susunod na command.

| &

Ang mga hiwalay na utos sa pipeline. Ang parehong karaniwang output at karaniwang error ng naunang utos ay piped sa karaniwang input ng susunod na command. Ang form na ito ng pag-redirect ay binabawasan ang mga form tulad ng 2> at> &.

< fileName

Ang file na pinangalanan ng fileName ay binuksan at ginagamit bilang karaniwang input para sa unang command sa pipeline.

<@ fileId

Ang FileId ay dapat na tagatukoy para sa isang bukas na file, tulad ng return value mula sa isang nakaraang tawag upang buksan . Ginagamit ito bilang karaniwang input para sa unang command sa pipeline. Ang FileId ay dapat na binuksan para sa pagbabasa.

<< halaga

Ang halaga ay naipasa sa unang utos bilang karaniwang pamantayan nito.

> fileName

Ang karaniwang output mula sa huling utos ay na-redirect sa file na pinangalanan na fileName , na pinapalitan ang mga naunang nilalaman nito.

2> fileName

Ang karaniwang error mula sa lahat ng mga utos sa pipeline ay na-redirect sa file na pinangalanang fileName , na pinapalitan ang mga naunang nilalaman nito.

> & fileName

Parehong karaniwang output mula sa huling command at karaniwang error mula sa lahat ng mga command ay nai-redirect sa file na pinangalanang fileName , pinapalitan ang mga naunang nilalaman nito.

>> fileName

Ang karaniwang output mula sa huling command ay nai-redirect sa file na pinangalanang fileName , na naglalagay dito sa halip na i-overwrite ito.

2 >> fileName

Ang karaniwang error mula sa lahat ng mga utos sa pipeline ay na-redirect sa file na pinangalanang fileName , na naglalagay dito sa halip na i-overwrite ito.

>> & fileName

Ang parehong karaniwang output mula sa huling command at karaniwang error mula sa lahat ng mga command ay nai-redirect sa file na pinangalanang fileName , na naglalagay dito sa halip na i-overwrite ito.

> @ fileId

Ang FileId ay dapat na tagatukoy para sa isang bukas na file, tulad ng return value mula sa isang nakaraang tawag upang buksan . Ang karaniwang output mula sa huling command ay na-redirect sa file ng fileId , na dapat na binuksan para sa pagsusulat.

2> @ fileId

Ang FileId ay dapat na tagatukoy para sa isang bukas na file, tulad ng return value mula sa isang nakaraang tawag upang buksan . Ang karaniwang error mula sa lahat ng mga utos sa pipeline ay na-redirect sa file ng fileId . Ang file ay dapat na binuksan para sa pagsusulat.

> & @ fileId

Ang FileId ay dapat na tagatukoy para sa isang bukas na file, tulad ng return value mula sa isang nakaraang tawag upang buksan . Parehong karaniwang output mula sa huling command at karaniwang error mula sa lahat ng mga command ay nai-redirect sa file file's. Ang file ay dapat na binuksan para sa pagsusulat.

Kung ang standard na output ay hindi na-redirect pagkatapos ay ibabalik ng command na exec ang karaniwang output mula sa huling command sa pipeline. Kung ang alinman sa mga utos sa pipeline exit abnormally o pinapatay o nasuspinde, ang exec ay ibabalik ang isang error at ang mensahe ng error ay magsasama ng output ng tubo na sinundan ng mga mensahe ng error na naglalarawan sa mga abnormal na terminasyon; ang variable na errorCode ay maglalaman ng karagdagang impormasyon tungkol sa huling abnormal na pagwawakas na nakatagpo. Kung ang alinman sa mga utos ay nagsusulat sa karaniwang standard na error na file at ang karaniwang error na ito ay hindi na-redirect, ang exec ay magbabalik ng isang error; ang mensahe ng error ay kasama ang karaniwang output ng pipeline, na sinusundan ng mga mensahe tungkol sa abnormal na mga terminasyon (kung mayroon man), na sinusundan ng karaniwang error output.

Kung ang huling character ng resulta o mensahe ng error ay isang newline pagkatapos na ang character ay normal na tinanggal mula sa resulta o error na mensahe. Ito ay pare-pareho sa ibang mga halaga ng Tcl return, na karaniwang hindi nagtatapos sa mga bagong linya. Gayunpaman, kung ang -keepnewline ay tinukoy na pagkatapos ay ang trailing newline ay mananatili.

Kung ang standard na input ay hindi na-redirect sa `` <'' o `` << '' o `` <@ '' ang karaniwang input para sa unang command sa pipeline ay nakuha mula sa kasalukuyang standard na input ng application.

Kung ang huling arg ay `` & '' ang pipeline ay papatayin sa background. Sa kasong ito ang utos ng exec ay babalik sa isang listahan na ang mga elemento ay ang mga tagapagpakilala ng proseso para sa lahat ng mga subprocesses sa pipeline. Ang standard na output mula sa huling command sa pipeline ay pupunta sa karaniwang output ng application kung hindi ito na-redirect, at ang output ng error mula sa lahat ng mga utos sa pipeline ay pupunta sa standard error file ng application maliban kung ma-redirect.

Ang unang salita sa bawat utos ay kinuha bilang pangalan ng utos; Ang tilde-substitution ay isinagawa dito, at kung ang resulta ay walang mga slashes ang mga direktoryo sa variable ng kapaligiran PATH ay hinahanap para sa isang executable ng ibinigay na pangalan. Kung ang pangalan ay naglalaman ng isang slash pagkatapos ito ay dapat sumangguni sa isang executable naaabot mula sa kasalukuyang direktoryo. Walang pagpapalawak ng "glob" o iba pang mga substitutions na tulad ng shell ay isinagawa sa mga argumento sa mga utos.

Mga Isyu sa Portability

Windows (lahat ng bersyon)

Ang pagbabasa mula sa o pagsulat sa isang socket, gamit ang notation `` @ fileId ', ay hindi gumagana. Kapag nagbabasa mula sa isang socket, ang isang 16-bit na DOS application ay mag-hang at isang 32-bit na application ay babalik kaagad sa end-of-file. Kapag ang alinman sa uri ng application magsusulat sa isang socket, ang impormasyon ay sa halip na ipinadala sa console, kung ang isa ay naroroon, o ay itinapon.

Ang widget ng teksto ng Tk console ay hindi nagbibigay ng tunay na mga pamantayan ng IO na kakayahan. Sa ilalim ng Tk, kapag nagre-redirect mula sa karaniwang input, makikita ng lahat ng mga application ang isang agarang end-of-file; Ang impormasyon na na-redirect sa karaniwang output o karaniwang error ay itatapon.

Ang alinman sa pasulong o paatras na slashes ay tinatanggap bilang mga separators ng landas para sa mga argumento sa mga utos ng Tcl. Kapag nagsasagawa ng isang application, ang path name na tinukoy para sa application ay maaari ring maglaman ng pasulong o paatras na slashes bilang mga separators ng landas. Tandaan, gayunpaman, na ang karamihan sa mga application ng Windows ay tumatanggap ng mga argumento na may mga forward slashes lamang bilang mga delimiter ng opsyon at mga backslashes lamang sa mga landas. Ang anumang mga argumento sa isang application na tukuyin ang isang pangalan ng landas na may mga forward slashes ay hindi awtomatikong mabago upang gamitin ang backslash na character. Kung ang isang argumento ay naglalaman ng mga forward slash bilang path separator, maaaring ito o hindi maaaring makilala bilang isang path name, depende sa programa.

Bukod pa rito, kapag tumatawag sa 16-bit na DOS o Windows 3.X application, dapat gamitin ng lahat ng mga pangalan ng path ang short, cryptic, path format (eg, gamit ang `` applba ~ 1.def '' sa halip ng `` applbakery.default '' ).

Ang dalawa o higit pang pasulong o pabalik na mga slash sa isang hilera sa isang landas ay tumutukoy sa isang path ng network. Halimbawa, ang isang simpleng pagsasaayos ng direktoryo ng root c: / na may isang subdirectory / windows / system ay magbubunga ng c: // windows / system (dalawang slashes magkasama), na tumutukoy sa mount point na tinatawag na sistema sa makina na tinatawag na windows (at ang c: / ay hindi pinansin), at hindi katumbas sa c: / windows / system , na naglalarawan ng direktoryo sa kasalukuyang computer. Ang file join command ay dapat gamitin upang ihalo ang mga bahagi ng landas.

Windows NT

Kapag sinusubukang magsagawa ng isang application, unang hanapin ang pangalan para sa pangalan na tinukoy. Pagkatapos, sa order, .com , .exe , at .bat ay idinagdag sa dulo ng tinukoy na pangalan at hinahanap nito ang mas mahabang pangalan. Kung ang isang pangalan ng direktoryo ay hindi tinukoy bilang bahagi ng pangalan ng application, ang mga sumusunod na direktoryo ay awtomatikong hinanap sa pagkakasunud-sunod kapag sinusubukang hanapin ang application:

Ang direktoryo mula sa kung saan ang Tcl executable ay na-load.
Ang kasalukuyang direktoryo.
Ang direktoryo ng Windows NT 32-bit system.
Ang direktoryo ng Windows NT 16-bit system.
Ang direktoryo ng tahanan ng Windows NT.
Ang mga direktoryo na nakalista sa landas.

Upang maisagawa ang mga command na builtin ng shell tulad ng dir at kopyahin , ang tumatawag ay dapat na maghanda ng `` cmd.exe / c '' sa nais na utos.

Windows 95

Kapag sinusubukang magsagawa ng isang application, unang hanapin ang pangalan para sa pangalan na tinukoy. Pagkatapos, sa order, .com , .exe , at .bat ay idinagdag sa dulo ng tinukoy na pangalan at hinahanap nito ang mas mahabang pangalan. Kung ang isang pangalan ng direktoryo ay hindi tinukoy bilang bahagi ng pangalan ng application, ang mga sumusunod na direktoryo ay awtomatikong hinanap sa pagkakasunud-sunod kapag sinusubukang hanapin ang application:

Ang direktoryo mula sa kung saan ang Tcl executable ay na-load.
Ang kasalukuyang direktoryo.
Ang direktoryo ng Windows 95 system.
Ang home directory ng Windows 95.
Ang mga direktoryo na nakalista sa landas.

Upang maisagawa ang mga command na builtin ng shell tulad ng dir at kopyahin , ang tumatawag ay dapat na maghanda ng `` command.com / c '' sa nais na utos.

Sa sandaling binasa ng isang 16-bit na application ng DOS ang standard na input mula sa isang console at pagkatapos ay huminto, ang lahat ng susunod na magpatakbo ng 16-bit na mga application ng DOS ay makakakita ng karaniwang input na isinara na. Ang 32-bit na mga application ay walang problemang ito at tatakbo nang tama, kahit na ang isang 16-bit na application ng DOS ay iniisip na ang standard na input ay sarado. Walang kilala na workaround para sa bug na ito sa oras na ito.

Ang pag-redirect sa pagitan ng NUL: aparato at isang 16-bit na application ay hindi laging gumagana. Kapag nagre-redirect mula sa NUL:, ang ilang mga application ay maaaring mag-hang, ang iba ay makakakuha ng isang walang katapusan na stream ng `` 0x01 '' bytes, at ang ilan ay aktwal na makakakuha ng isang kagyat na end-of-file; ang pag-uugali ay tila depende sa isang bagay na naipon sa application mismo. Kapag nagre-redirect ng mas malaki kaysa sa 4K o kaya sa NUL:, ang ilang mga application ay mag-hang. Ang mga problema sa itaas ay hindi mangyayari sa 32-bit na mga application.

Ang lahat ng mga DOS 16-bit na application ay tumatakbo nang sabay-sabay. Ang lahat ng mga karaniwang input mula sa isang pipe sa isang 16-bit DOS application ay nakolekta sa isang pansamantalang file; ang kabilang dulo ng tubo ay dapat sarado bago magsimula ang pagpapatupad ng 16-bit na DOS application. Ang lahat ng karaniwang output o error mula sa isang 16-bit na DOS application sa isang pipe ay nakolekta sa pansamantalang mga file; dapat na wakasan ang application bago ang mga pansamantalang file ay nai-redirect sa susunod na yugto ng pipeline. Ito ay dahil sa isang workaround para sa isang Windows 95 bug sa pagpapatupad ng mga tubo, at kung paano ang karaniwang Windows 95 DOS shell humahawak ng tubo mismo.

Ang ilang mga application, tulad ng command.com , ay hindi dapat maisagawa nang interactively. Ang mga application na direktang ma-access ang console window, sa halip na magbasa mula sa kanilang karaniwang input at pagsulat sa kanilang karaniwang output ay maaaring mabigo, mag-hang Tcl, o kahit na mag-hang sa system kung ang kanilang sariling pribadong console window ay hindi magagamit sa kanila.

Macintosh

Ang utos ng exec ay hindi ipinatupad at hindi umiiral sa ilalim ng Macintosh.

Unix

Ang utos ng exec ay ganap na gumagana at gumagana tulad ng inilarawan.

Tingnan din

error (n), bukas (n)

Mga Keyword

execute, pipeline, redirection, subprocess

Mahalaga: Gamitin ang command ng tao ( % man ) upang makita kung paano ginagamit ang isang utos sa iyong partikular na computer.