Skip to main content

Linux - polecenie Unix: exec

How to Add/Delete Users and Groups, Change Password, Finger: Linux Administration Tutorial 18 (Czerwiec 2026)

How to Add/Delete Users and Groups, Change Password, Finger: Linux Administration Tutorial 18 (Czerwiec 2026)
Anonim

exec - Wywołuje podproces (y)

Streszczenie

exec? przełączniki ? arg ? arg … ?

Opis

To polecenie traktuje swoje argumenty jako specyfikację jednego lub więcej podprocesów do wykonania. Argumenty mają postać standardowego potoku powłoki, gdzie każdy arg staje się jednym słowem polecenia, a każde odrębne polecenie staje się podprocesorem.

Jeśli początkowe argumenty doexec zacząć od- następnie są traktowane jako przełączniki wiersza polecenia i nie są częścią specyfikacji potoku. Obecnie obsługiwane są następujące przełączniki:

-keepnewline

Zachowuje ciągnący znak nowej linii na wyjściu potoku. Zwykle usuwany jest ciąg znaków nowej linii.

--

Zaznacza koniec przełączników. Argument następujący po tym będzie traktowany jako pierwszy arg nawet jeśli zaczyna się od a-.

Jeżeli arg (lub para arg (s) ma jedną z form opisanych poniżej, a następnie jest używana przezexec kontrolować przepływ danych wejściowych i wyjściowych między podprocesami. Takie argumenty nie będą przekazywane do podprocesu (-ów). W formach takich jak `` < Nazwa pliku '' Nazwa pliku może znajdować się w oddzielnym argumencie od `` <'' lub w tym samym argumencie bez interweniującego obszaru (tj. `` < Nazwa pliku '').

|

Oddziela różne polecenia w potoku. Standardowe wyjście poprzedniego polecenia zostanie podłączone do standardowego wejścia następnego polecenia.

|&

Oddziela różne polecenia w potoku. Zarówno standardowe wyjście, jak i błąd standardowy poprzedniego polecenia zostaną podłączone do standardowego wejścia następnego polecenia. Ta forma przekierowania zastępuje formularze takie jak 2> i> &.

< Nazwa pliku

Plik nazwany przez Nazwa pliku jest otwierany i używany jako standardowe wejście dla pierwszego polecenia w potoku.

<@ fileId

FileId musi być identyfikatorem otwartego pliku, na przykład wartością zwracaną z poprzedniego wywołaniaotwarty. Jest używany jako standardowe wejście dla pierwszego polecenia w potoku. FileId musiało zostać otwarte do czytania.

<< wartość

Wartość jest przekazywane do pierwszego polecenia jako standardowe wejście.

> Nazwa pliku

Standardowe wyjście z ostatniego polecenia jest przekierowywane do pliku o nazwie Nazwa pliku , zastępując poprzednią zawartość.

2> Nazwa pliku

Standardowy błąd wszystkich poleceń w potoku jest przekierowywany do pliku o nazwie Nazwa pliku , zastępując poprzednią zawartość.

>& Nazwa pliku

Zarówno standardowe wyjście z ostatniego polecenia, jak i standardowy błąd wszystkich poleceń są przekierowywane do pliku o nazwie Nazwa pliku , zastępując poprzednią zawartość.

>> Nazwa pliku

Standardowe wyjście z ostatniego polecenia jest przekierowywane do pliku o nazwie Nazwa pliku , dołączanie do niego zamiast nadpisywania go.

2>> Nazwa pliku

Standardowy błąd wszystkich poleceń w potoku jest przekierowywany do pliku o nazwie Nazwa pliku , dołączanie do niego zamiast nadpisywania go.

>>& Nazwa pliku

Zarówno standardowe wyjście z ostatniego polecenia, jak i standardowy błąd wszystkich poleceń są przekierowywane do pliku o nazwie Nazwa pliku , dołączanie do niego zamiast nadpisywania go.

>@ fileId

FileId musi być identyfikatorem otwartego pliku, na przykład wartością zwracaną z poprzedniego wywołaniaotwarty. Standardowe wyjście z ostatniego polecenia jest przekierowywane na fileId plik, który musiał zostać otwarty do pisania.

2>@ fileId

FileId musi być identyfikatorem otwartego pliku, na przykład wartością zwracaną z poprzedniego wywołaniaotwarty. Standardowy błąd wszystkich poleceń w potoku jest przekierowywany fileId plik. Plik musi być otwarty do zapisu.

>&@ fileId

FileId musi być identyfikatorem otwartego pliku, na przykład wartością zwracaną z poprzedniego wywołaniaotwarty. Zarówno standardowe wyjście z ostatniego polecenia, jak i standardowy błąd wszystkich poleceń są przekierowywane na fileId plik. Plik musi być otwarty do zapisu.

Jeśli standardowe wyjście nie zostało przekierowane, toexec Polecenie zwraca standardowe wyjście z ostatniego polecenia w potoku. Jeśli którekolwiek z poleceń w rurociągu wyjdzie nienormalnie lub zostanie zabite lub zawieszone, wtedyexec zwróci błąd, a komunikat o błędzie będzie zawierał dane wyjściowe potoku, a następnie komunikaty o błędach opisujące nieprawidłowe zakończenie;Kod błędu zmienna będzie zawierała dodatkowe informacje o napotkaniu ostatniego nietypowego zakończenia. Jeśli którekolwiek z poleceń zapisuje do standardowego pliku błędów i ten standardowy błąd nie jest przekierowywany, toexec zwróci błąd; komunikat o błędzie będzie zawierał standardowe wyjście potoku, a następnie komunikaty o nieprawidłowych zakończeniach (jeśli występują), po których następuje standardowy wynik błędu.

Jeśli ostatni znak wyniku lub komunikat o błędzie jest znakiem nowego wiersza, to ten znak jest zwykle usuwany z wyniku lub komunikatu o błędzie. Jest to zgodne z innymi wartościami zwracanymi przez Tcl, które zwykle nie kończą się znakami nowego wiersza. Jeśli jednak-keepnewline jest określony, a następnie śledzony znak nowej linii zostaje zachowany.

Jeśli standardowe wejście nie zostanie przekierowane za pomocą `` <'' lub `` << '' lub `` <@ '', standardowe wejście dla pierwszego polecenia w potoku jest pobierane z bieżącego standardowego wejścia aplikacji.

Jeśli ostatni arg to `` & '', wówczas potok zostanie wykonany w tle. W tym przypadkuexecPolecenie zwróci listę, której elementami są identyfikatory procesów dla wszystkich podprocesów w potoku.Standardowe wyjście z ostatniego polecenia w potoku przejdzie do standardowego wyjścia aplikacji, jeśli nie zostało przekierowane, a wynik błędu wszystkich poleceń w potoku zostanie przeniesiony do standardowego pliku błędów aplikacji, chyba że zostanie przekierowany.

Pierwsze słowo w każdym poleceniu jest traktowane jako nazwa polecenia; podstawiana jest tylda-podstawienie, a jeśli wynik nie zawiera ukośników, wówczas katalogi w zmiennej środowiskowej PATH są wyszukiwane dla pliku wykonywalnego według podanej nazwy. Jeśli nazwa zawiera ukośnik, musi odnosić się do pliku wykonywalnego osiągalnego z bieżącego katalogu. Żadne rozszerzenie "glob" ani inne podobne do powłoki podstawienia nie są wykonywane na argumentach poleceń.

Problemy z przenośnością

Windows (wszystkie wersje)

Odczytywanie lub zapisywanie do gniazda za pomocą ``@ fileId notacja nie działa. Podczas odczytu z gniazda 16-bitowa aplikacja DOS zawiesza się, a 32-bitowa aplikacja natychmiast powraca z końcem pliku. Gdy dowolny typ aplikacji zapisuje dane w gnieździe, informacja jest wysyłana do konsoli, jeśli jest obecna lub jest odrzucana.

Widżet tekstowy konsoli Tk nie zapewnia rzeczywistych standardowych możliwości IO. Pod Tk, podczas przekierowywania ze standardowego wejścia, wszystkie aplikacje zobaczą natychmiastowy koniec pliku; informacja przekierowana na standardowe wyjście lub standardowy błąd zostanie odrzucona.

Trafione w przód lub w tył ukośniki są akceptowane jako separatory ścieżek dla argumentów poleceń Tcl. Podczas wykonywania aplikacji nazwa ścieżki określona dla aplikacji może również zawierać ukośniki w przód lub w tył jako separatory ścieżek. Należy jednak pamiętać, że większość aplikacji systemu Windows przyjmuje argumenty z ukośnikami w przód tylko jako ograniczniki opcji i ukośniki odwrotne tylko w ścieżkach. Wszelkie argumenty aplikacji, która określa nazwę ścieżki z ukośnikami, nie będą automatycznie konwertowane na znaki odwróconego ukośnika. Jeśli argument zawiera ukośniki w przód jako separator ścieżek, to może, ale nie musi być rozpoznany jako nazwa ścieżki, w zależności od programu.

Dodatkowo, podczas wywoływania 16-bitowej aplikacji DOS lub Windows 3.X, wszystkie nazwy ścieżek muszą wykorzystywać krótki, tajemniczy format ścieżki (np. Za pomocą `` applba ~ 1.def '' zamiast `` applbakery.default '' ).

Dwa lub więcej ukośników do przodu lub do tyłu w rzędzie w ścieżce odnosi się do ścieżki sieciowej. Na przykład prosta konkatenacja katalogu głównegodo:/ z podkatalogiem/ windows / system przyniesiec: // windows / system (dwa ukośniki razem), które odnoszą się do punktu podłączenia nazwanegosystem na maszynie o nazwieWindows (ido:/ jest ignorowany) i nie jest równoważnyc: / windows / system, który opisuje katalog na bieżącym komputerze. Thedołączenie do pliku Polecenie powinno być używane do łączenia komponentów ścieżki.

Windows NT

Podczas próby uruchomienia aplikacjiexec najpierw wyszukuje nazwę tak, jak została określona. Następnie, w kolejności,.com, .exe, i.nietoperz są dołączane na końcu podanej nazwy i szukają dłuższej nazwy. Jeśli nazwa katalogu nie została określona jako część nazwy aplikacji, następujące katalogi są automatycznie wyszukiwane w kolejności przy próbie zlokalizowania aplikacji:

Katalog, z którego został załadowany plik wykonywalny Tcl.Aktualny katalog.32-bitowy katalog systemu Windows NT.16-bitowy katalog systemu Windows NT.Katalog domowy systemu Windows NT.Katalogi wymienione na ścieżce.

Aby wykonać polecenie wbudowane powłoki, takie jakreż iKopiuj, wywołujący musi poprzedzać ``cmd.exe / c"do żądanego polecenia.

Windows 95

Podczas próby uruchomienia aplikacjiexec najpierw wyszukuje nazwę tak, jak została określona. Następnie, w kolejności,.com, .exe, i.nietoperz są dołączane na końcu podanej nazwy i szukają dłuższej nazwy. Jeśli nazwa katalogu nie została określona jako część nazwy aplikacji, następujące katalogi są automatycznie wyszukiwane w kolejności przy próbie zlokalizowania aplikacji:

Katalog, z którego został załadowany plik wykonywalny Tcl.Aktualny katalog.Katalog systemu Windows 95.Katalog domowy systemu Windows 95.Katalogi wymienione na ścieżce.

Aby wykonać polecenie wbudowane powłoki, takie jakreż iKopiuj, wywołujący musi poprzedzać ``command.com / c"do żądanego polecenia.

Gdy 16-bitowa aplikacja DOS odczyta standardowe wejście z konsoli, a następnie wyjdzie, wszystkie uruchomione 16-bitowe aplikacje DOS zobaczą standardowe wejście jako już zamknięte. Aplikacje 32-bitowe nie mają tego problemu i działają poprawnie, nawet po tym, jak 16-bitowa aplikacja DOS uważa, że ​​standardowe wejście jest zamknięte. Obecnie nie jest znane obejście tego błędu.

Przekierowanie międzyNUL: urządzenie i aplikacja 16-bitowa nie zawsze działa. Podczas przekierowania zNUL:, niektóre aplikacje mogą się zawiesić, inne otrzymają nieskończony strumień bajtów "0x01", a niektóre z nich faktycznie uzyskają natychmiastowy koniec pliku; zachowanie wydaje się zależeć od czegoś skompilowanego do samej aplikacji. Przekierowując więcej niż 4K doNUL:niektóre aplikacje zawieszą się. Powyższe problemy nie występują w aplikacjach 32-bitowych.

Wszystkie 16-bitowe aplikacje DOS działają synchronicznie. Wszystkie standardowe dane wejściowe z potoku do 16-bitowej aplikacji DOS są gromadzone w pliku tymczasowym; drugi koniec rury musi zostać zamknięty przed rozpoczęciem 16-bitowej aplikacji DOS.Wszystkie standardowe wyjścia lub błędy z 16-bitowej aplikacji DOS do potoku są gromadzone w plikach tymczasowych; aplikacja musi zostać zakończona przed przekierowaniem plików tymczasowych do następnego etapu rurociągu. Jest to spowodowane obejściem błędu Windows 95 w implementacji potoków i jest to, w jaki sposób standardowa powłoka DOS systemu Windows 95 obsługuje same rury.

Niektóre aplikacje, takie jakcommand.com, nie powinny być wykonywane interaktywnie. Aplikacje, które mają bezpośredni dostęp do okna konsoli, zamiast odczytywać ze standardowego wejścia i zapisu na standardowe wyjście, mogą zawieść, zawiesić Tcl, a nawet zawiesić system, jeśli nie ma do nich dostępu do własnego prywatnego okna konsoli.

Prochowiec

Theexec Polecenie nie jest zaimplementowane i nie istnieje w systemie Macintosh.

Unix

Theexec polecenie jest w pełni funkcjonalne i działa zgodnie z opisem.

Zobacz też

błąd (n), otwórz (n)

Słowa kluczowe

wykonaj, potok, przekierowanie, podproces

Ważny: Użyj mężczyzna dowództwo ( % mężczyzna ), aby zobaczyć, jak polecenie jest używane na danym komputerze.