Exec - Линукс команда - Unix команда

exec - Извикване на подпроцес (и)

резюме

изпълнител ? ключове ? арг ? арг ... ?

описание

Тази команда третира аргументите си като спецификация на една или повече подпроцеси за изпълнение. Аргументите се вземат под формата на стандартен тръбопровод за обвивка, където всеки arg става дума за команда и всяка отделна команда става подпроцес.

Ако първоначалните аргументи за exec започват с - тогава те се третират като комутатори на командния ред и не са част от спецификацията на тръбопровода. Понастоящем се поддържат следните ключове:

-keepnewline

Запазва нов ред в изхода на тръбопровода. Обикновено нов ред ще бъде изтрит.

-

Маркира края на превключвателите. Аргументът, следващ този, ще бъде третиран като първия арг, дори ако той започва с - .

Ако arg (или чифт arg 's) има една от формите, описани по-долу, тогава той се използва от exec за контролиране на потока от вход и изход между подпроцес (ите). Такива аргументи няма да бъдат предадени на подпроцеса (ите). Във формули като `` име на файл '' името на файла може да бъде в отделен аргумент от `` <'' или в същия аргумент без интерфейсно пространство (т.е. `` име на файл '').

|

Раздели отделни команди в тръбопровода. Стандартният изход на предишната команда ще бъде включен в стандартния вход на следващата команда.

| &

Раздели отделни команди в тръбопровода. Както стандартният изход, така и стандартната грешка на предходната команда ще бъдат въведени в стандартния вход на следващата команда. Тази форма на пренасочване замества форми като 2> и>.

< fileName

Файлът, наречен fileName, се отваря и се използва като стандартен вход за първата команда, която е в процес на работа.

<@ fileId

FileId трябва да бъде идентификаторът на отворен файл, като например връщащата стойност от предишното повикване, за да се отвори . Той се използва като стандартен вход за първата команда в тръбопровода. FileId трябва да е отворен за четене.

<< стойност

Стойността се предава на първата команда като нейния стандартен вход.

> fileName

Стандартният изход от последната команда се пренасочва към файла, наречен fileName , който презаписва предишното си съдържание.

2> име на файл

Стандартната грешка от всички команди в тръбопровода се пренасочва към файла, наречен fileName , който презаписва предишното си съдържание.

> & fileName

Както стандартният изход от последната команда, така и стандартната грешка от всички команди се пренасочват към файла, наречен fileName , който презаписва предишното си съдържание.

>> fileName

Стандартният изход от последната команда се пренасочва към файла, наречен fileName , който се добавя към него, вместо да се презаписва.

2 >> fileName

Стандартната грешка от всички команди в тръбопровода се пренасочва към файла, наречен fileName , като се добавя към него, вместо да се презаписва.

>> & fileName

Както стандартният изход от последната команда, така и стандартната грешка от всички команди се пренасочват към файла, наречен fileName , който се добавя към него, вместо да се презаписва.

> @ fileId

FileId трябва да бъде идентификаторът на отворен файл, като например връщащата стойност от предишното повикване, за да се отвори . Стандартният изход от последната команда се пренасочва към файла на fileId , който трябва да е отворен за писане.

2> @ fileId

FileId трябва да бъде идентификаторът на отворен файл, като например връщащата стойност от предишното повикване, за да се отвори . Стандартната грешка от всички команди в тръбопровода се пренасочва към файла на fileId . Файлът трябва да е отворен за писане.

> & & fileId

FileId трябва да бъде идентификаторът на отворен файл, като например връщащата стойност от предишното повикване, за да се отвори . Както стандартният изход от последната команда, така и стандартната грешка от всички команди се пренасочват към файла на fileId . Файлът трябва да е отворен за писане.

Ако стандартният изход не е пренасочен, тогава командата exec връща стандартния изход от последната команда в тръбопровода. Ако някоя от командите в тръбопровода излезе необичайно или ще бъде убита или спряна, тогава exec ще върне грешка и съобщението за грешка ще включва продукцията на тръбопровода, последвана от съобщения за грешка, описващи необичайни прекъсвания; променливата errorCode ще съдържа допълнителна информация за последното срещано ненормално терминиране. Ако някоя от командите пише в стандартния си файл за грешка и тази стандартна грешка не е пренасочена, тогава exec ще върне грешка; съобщението за грешка ще включва стандартния изход на тръбопровода, последван от съобщения за ненормални термини (ако има такива), последвани от стандартния изход за грешка.

Ако последният знак на резултата или съобщението за грешка е нов ред, този знак обикновено се изтрива от резултата или съобщението за грешка. Това е в съответствие с други стойности за връщане в Tcl, които обикновено не завършват с нови редове. Ако обаче е зададена -keepnewline, останалият нов ред се запазва.

Ако стандартният вход не е пренасочен с `` '' или `` '' или `` <@ ', тогава стандартният вход за първата команда в тръбопровода се взема от текущия стандартен вход на приложението.

Ако последният arg е `` & '', тогава тръбопроводът ще бъде изпълнен на фона. В този случай командата exec ще върне списък, чиито елементи са идентификаторите на процесите за всички подпроцеси в тръбопровода. Стандартният изход от последната команда в тръбопровода ще отиде до стандартния изход на приложението, ако не е пренасочен, а изходът за грешка от всички команди в тръбопровода ще отиде до стандартния файл за грешка на приложението, освен ако не бъде пренасочен.

Първата дума във всяка команда се приема като команда; tilde-substitution се изпълнява върху него и ако резултатът не съдържа наклонена черта, директорите в променливата на PATH среда се търсят за изпълним файл с дадено име. Ако името съдържа наклонена черта, то трябва да се отнася до изпълнимия файл, достижим от текущата директория. В аргументите за команди не се изпълняват разширения на "глобус" или други замествания като shell.

Проблеми с преносимостта

Windows (всички версии)

Четенето от или писането в гнездо, използвайки означението `` @ fileId '', не работи. Когато четете от сокет, 16-битово приложение за DOS ще виси и 32-битово приложение ще се върне веднага с края на файла. Когато някой от типовете приложения пише в гнездо, информацията се изпраща в конзолата, ако има такъв или се изхвърли.

Приспособлението за текстова конзола Tk не осигурява истински стандартни IO възможности. При Tk, при пренасочване от стандартния вход, всички приложения ще виждат незабавен край на файла; информацията, пренасочена към стандартен изход или стандартна грешка, ще бъде отхвърлена.

Прекъсванията напред или назад се приемат като сепаратори на пътя за аргументи на Tcl команди. Когато изпълнявате приложение, името на пътя, посочено за приложението, може да съдържа и пресечници назад или назад като сепаратори на път. Имайте обаче предвид, че повечето приложения на Windows приемат аргументи с преден наклон само като ограничители на опциите и обратно наклон само в пътища. Всички аргументи за приложение, които указват име на път с пресечени наклонени черти, няма да се конвертират автоматично, за да се използва знакът за наклонена черта. Ако аргументът съдържа плъзгачи за напред като сепаратор на път, той може или не може да бъде разпознат като име на път, в зависимост от програмата.

Освен това, когато се обаждате на 16-битово приложение за DOS или Windows 3.X, всички имена на пътеки трябва да използват краткия, криптиращ формат на пътя (например, използвайки "applba ~ 1.def" вместо "applbakery.default" ).

Две или повече преки или задни наклони подред в един път се отнасят до мрежов път. Например, просто обединяване на коренната директория c: / с поддиректория / windows / system ще доведе до c: // windows / system (две наклонени черти), което се отнася до точката, наречена mount на системата наречена windows c: / се игнорира) и не е равносилно на c: / windows / system , което описва директория на текущия компютър. Командата за свързване на файлове трябва да се използва за свързване на компонентите на пътя.

Windows NT

Когато се опитвате да изпълните дадено приложение, exec първо търси името, както е посочено. След това, с цел .com , .exe и .bat се добавят към края на посоченото име и той търси по-дългото име. Ако името на директорията не е посочено като част от името на приложението, следните директории се търсят автоматично, когато се опитвате да намерите приложението:

Директорията, от която е заредена изпълнимата програма Tcl.
Текущата директория.
Windows NT 32-битовата системна директория.
16-битовата системна директория на Windows NT.
Началната директория на Windows NT.
Директорите, изброени в пътя.

За да изпълни вградените команди на shell, като dir и copy , обаждащият се трябва да предложи `` cmd.exe / c '' на желаната команда.

Windows 95

Когато се опитвате да изпълните дадено приложение, exec първо търси името, както е посочено. След това, с цел .com , .exe и .bat се добавят към края на посоченото име и той търси по-дългото име. Ако името на директорията не е посочено като част от името на приложението, следните директории се търсят автоматично, когато се опитвате да намерите приложението:

Директорията, от която е заредена изпълнимата програма Tcl.
Текущата директория.
Системната директория на Windows 95.
Началната директория на Windows 95.
Директорите, изброени в пътя.

За да изпълни команди, вградени в shell, като dir и copy , обаждащият се трябва да предложи " command.com / c " на желаната команда.

След като 16-битово приложение за DOS прочете стандартен вход от конзолата и след това излезе, всички в последствие изпълнени 16-битови DOS приложения ще видят стандартния вход като вече затворен. 32-битовите приложения нямат този проблем и ще работят правилно, дори след като 16-битово приложение за DOS смята, че стандартният вход е затворен. Понастоящем няма известно разрешение за тази грешка.

Пренасочването между устройството NUL: устройство и 16-битово приложение не винаги работи. Когато пренасочвате от NUL: някои приложения могат да се обесят, други ще получат безкраен поток от "0x01" байта, а други ще получат незабавно незабавен край на файла; поведението изглежда зависи от нещо, съставено в самото приложение. Когато пренасочвате по-голямо от 4K или по-малко към NUL: някои приложения ще се окажат затворени. Горните проблеми не се случват при 32-битовите приложения.

Всички DOS 16-битови приложения се изпълняват синхронно. Всички стандартни входове от дадена тръба към 16-битово приложение за DOS се събират във временни файлове; другият край на тръбата трябва да бъде затворен, преди да започне изпълнението на 16-битовото приложение DOS. Всички стандартни изходи или грешки от 16-битово приложение за DOS до тръба се събират в временни файлове; приложението трябва да бъде прекратено, преди временните файлове да бъдат пренасочени към следващия етап на тръбопровода. Това се дължи на решение за грешка в Windows 95 при внедряването на тръби и е как стандартният Windows 95 DOS корпус обработва самите тръби.

Някои приложения, като command.com , не трябва да се изпълняват интерактивно. Приложенията, които директно влизат в прозореца на конзолата, вместо да четат от стандартния им вход и писане до стандартния си изход, може да се провалят, да се закачат Tcl или дори да се окачат на системата, ако не им е предоставен прозорец на частна конзола.

шлифер

Командата exec не се изпълнява и не съществува под Macintosh.

Unix

Командата exec е напълно функционална и работи както е описано.

Вижте също

грешка (n), отворена (n)

Ключови думи

изпълнение, тръбопровод, пренасочване, подпроцес

Важно: Използвайте командата човек ( % man ), за да видите как се използва команда на вашия компютър.