exec - Richiama sottoprocesso (i)
Sinossi
exec? interruttori ? arg ? arg … ?
Descrizione
Questo comando tratta i suoi argomenti come le specifiche di uno o più processi secondari da eseguire. Gli argomenti prendono la forma di una pipeline standard di shell in cui ciascuno arg diventa una parola di un comando e ogni comando distinto diventa un sottoprocesso.
Se gli argomenti iniziali aexec iniziare con- quindi vengono trattati come switch da riga di comando e non fanno parte delle specifiche della pipeline. Le seguenti opzioni sono attualmente supportate:
-keepnewline
Mantiene una nuova riga finale nell'output della pipeline. Normalmente una riga finale finale verrà eliminata.
--
Segna la fine degli switch. L'argomento che segue questo sarà trattato come il primo arg anche se inizia con a-.
Se uno arg (o un paio di arg 's) ha una delle forme descritte di seguito, quindi viene utilizzata daexec per controllare il flusso di input e output tra i sottoprocessi. Tali argomenti non saranno passati al sottoprocesso (i). In forme come `` < nome del file '' nome del file può essere in un argomento separato da `` <'' o nello stesso argomento senza spazio intermedio (ad esempio `` < nome del file '').
|
Separa i comandi distinti nella pipeline. L'output standard del comando precedente verrà reindirizzato nello standard input del comando successivo.
|&
Separa i comandi distinti nella pipeline. Sia l'output standard che l'errore standard del comando precedente verranno reindirizzati nello standard input del comando successivo. Questa forma di reindirizzamento sovrascrive moduli come 2> e> &.
< nome del file
Il file nominato da nome del file viene aperto e utilizzato come input standard per il primo comando nella pipeline.
<@ fileId
FileId deve essere l'identificatore per un file aperto, come il valore di ritorno da una precedente chiamata aAperto. Viene utilizzato come input standard per il primo comando nella pipeline. FileId deve essere stato aperto per la lettura.
<< valore
Valore viene passato al primo comando come input standard.
> nome del file
L'output standard dell'ultimo comando viene reindirizzato al file denominato nome del file , sovrascrivendo i suoi contenuti precedenti.
2> nome del file
L'errore standard di tutti i comandi nella pipeline viene reindirizzato al file denominato nome del file , sovrascrivendo i suoi contenuti precedenti.
>& nome del file
Entrambi gli output standard dell'ultimo comando e l'errore standard di tutti i comandi vengono reindirizzati al file denominato nome del file , sovrascrivendo i suoi contenuti precedenti.
>> nome del file
L'output standard dell'ultimo comando viene reindirizzato al file denominato nome del file , accodandolo anziché sovrascrivendolo.
2>> nome del file
L'errore standard di tutti i comandi nella pipeline viene reindirizzato al file denominato nome del file , accodandolo anziché sovrascrivendolo.
>>& nome del file
Entrambi gli output standard dell'ultimo comando e l'errore standard di tutti i comandi vengono reindirizzati al file denominato nome del file , accodandolo anziché sovrascrivendolo.
>@ fileId
FileId deve essere l'identificatore per un file aperto, come il valore di ritorno da una precedente chiamata aAperto. L'output standard dell'ultimo comando viene reindirizzato a fileId Il file, che deve essere stato aperto per la scrittura.
2>@ fileId
FileId deve essere l'identificatore per un file aperto, come il valore di ritorno da una precedente chiamata aAperto. L'errore standard da tutti i comandi nella pipeline viene reindirizzato a fileId Il file. Il file deve essere stato aperto per la scrittura.
>&@ fileId
FileId deve essere l'identificatore per un file aperto, come il valore di ritorno da una precedente chiamata aAperto. Entrambi gli output standard dell'ultimo comando e l'errore standard di tutti i comandi vengono reindirizzati a fileId Il file. Il file deve essere stato aperto per la scrittura.
Se l'output standard non è stato reindirizzato, allora ilexec comando restituisce lo standard output dall'ultimo comando nella pipeline. Se qualcuno dei comandi nella pipeline esce in modo anomalo o viene ucciso o sospeso, alloraexec restituirà un errore e il messaggio di errore includerà l'output della pipeline seguito da messaggi di errore che descrivono le terminazioni anomale; ilcodice di errore la variabile conterrà informazioni aggiuntive sull'ultima interruzione anomala riscontrata. Se uno qualsiasi dei comandi scrive nel proprio file di errore standard e tale errore standard non viene reindirizzato, alloraexec restituirà un errore; il messaggio di errore includerà l'output standard della pipeline, seguito dai messaggi relativi alle terminazioni anomale (se presenti), seguite dall'output dell'errore standard.
Se l'ultimo carattere del risultato o il messaggio di errore è una nuova riga, quel carattere viene normalmente eliminato dal risultato o dal messaggio di errore. Questo è coerente con gli altri valori di ritorno di Tcl, che normalmente non terminano con le newline. Tuttavia, se-keepnewline viene specificato quindi viene mantenuto il newline finale.
Se l'input standard non viene reindirizzato con `` <'' o `` '' 'o `` <@' ', l'input standard per il primo comando nella pipeline viene preso dallo standard input corrente dell'applicazione.
Se l'ultimo arg è `` & '', quindi la pipeline verrà eseguita in background. In questo caso ilexeccomando restituirà una lista i cui elementi sono gli identificatori di processo per tutti i sottoprocessi nella pipeline.Lo standard output dall'ultimo comando nella pipeline passerà all'output standard dell'applicazione se non è stato reindirizzato e l'output di errore di tutti i comandi nella pipeline andrà al file di errore standard dell'applicazione, a meno che non venga reindirizzato.
La prima parola in ciascun comando è considerata come il nome del comando; su di esso viene eseguita la sostituzione tilde e, se il risultato non contiene barre, le directory nella variabile d'ambiente PATH vengono ricercate per un eseguibile con il nome specificato. Se il nome contiene una barra, deve fare riferimento a un eseguibile raggiungibile dalla directory corrente. Nessuna espansione "glob" o altre sostituzioni simili a shell vengono eseguite sugli argomenti dei comandi.
Problemi di portabilità
finestre (tutte le versioni)
Leggendo da o scrivendo su un socket, usando il ``@ fileId '' notazione, non funziona. Durante la lettura da un socket, un'applicazione DOS a 16 bit verrà interrotta e un'applicazione a 32 bit verrà restituita immediatamente con end-of-file. Quando entrambi i tipi di applicazione vengono scritti su un socket, le informazioni vengono invece inviate alla console, se ne è presente una o vengono eliminate.
Il widget di testo della console Tk non fornisce funzionalità IO standard reali. Sotto Tk, quando si reindirizza dall'input standard, tutte le applicazioni vedranno un end-of-file immediato; le informazioni reindirizzate allo standard output o l'errore standard verranno scartate.
Le barre in avanti o indietro sono accettate come separatori di percorso per argomenti ai comandi Tcl. Quando si esegue un'applicazione, il nome del percorso specificato per l'applicazione può contenere anche barre in avanti o indietro come separatori di percorso. Tenere presente, tuttavia, che la maggior parte delle applicazioni Windows accetta argomenti con barre in avanti solo come delimitatori di opzioni e barre retroverse solo nei percorsi. Qualsiasi argomento per un'applicazione che specifica un nome di percorso con barre in avanti non verrà automaticamente convertito per utilizzare il carattere barra rovesciata. Se un argomento contiene barre in avanti come separatore di percorso, può o meno essere riconosciuto come nome di percorso, a seconda del programma.
Inoltre, quando si chiama un'applicazione DOS o Windows 3.X a 16 bit, tutti i nomi di percorso devono utilizzare il formato di percorso breve, criptico (ad esempio, utilizzando `` applba ~ 1.def '' invece di `` applbakery.default '' ).
Due o più barre in avanti o indietro di una riga in un percorso si riferiscono a un percorso di rete. Ad esempio, una semplice concatenazione della directory rootc: / con una sottodirectory/ Windows / System cederàc: // Windows / System (due tagli insieme), che si riferisce al punto di mount chiamatosistema sulla macchina chiamatafinestre (e ilc: / viene ignorato) e non è equivalente ac: / Windows / System, che descrive una directory sul computer corrente. Ilfile join il comando dovrebbe essere usato per concatenare i componenti del percorso.
Windows NT
Quando si tenta di eseguire un'applicazione,exec prima cerca il nome come è stato specificato. Quindi, in ordine,.com, .EXE, e.bat vengono aggiunti alla fine del nome specificato e cerca il nome più lungo. Se il nome di una directory non è stato specificato come parte del nome dell'applicazione, le seguenti directory vengono automaticamente ricercate in ordine quando si tenta di localizzare l'applicazione:
La directory da cui è stato caricato l'eseguibile Tcl.La directory corrente.La directory di sistema a 32 bit di Windows NT.La directory di sistema a 16 bit di Windows NT.La home directory di Windows NT.Le directory elencate nel percorso. Per eseguire i comandi incorporati della shell comedir ecopia, il chiamante deve anteporre ``cmd.exe / c'' al comando desiderato. Windows 95 Quando si tenta di eseguire un'applicazione,exec prima cerca il nome come è stato specificato. Quindi, in ordine,.com, .EXE, e.bat vengono aggiunti alla fine del nome specificato e cerca il nome più lungo. Se il nome di una directory non è stato specificato come parte del nome dell'applicazione, le seguenti directory vengono automaticamente ricercate in ordine quando si tenta di localizzare l'applicazione: La directory da cui è stato caricato l'eseguibile Tcl.La directory corrente.La directory di sistema di Windows 95.La directory principale di Windows 95.Le directory elencate nel percorso. Per eseguire i comandi incorporati della shell comedir ecopia, il chiamante deve anteporre ``command.com / c'' al comando desiderato. Una volta che un'applicazione DOS a 16 bit ha letto l'input standard da una console e quindi ha chiuso, tutte le applicazioni DOS a 16 bit successive vedranno lo standard input come già chiuso. Le applicazioni a 32 bit non hanno questo problema e funzioneranno correttamente, anche dopo che un'applicazione DOS a 16 bit pensa che l'input standard sia chiuso. Al momento non ci sono soluzioni alternative per questo bug. Reindirizzamento tra ilNUL: dispositivo e un'applicazione a 16 bit non sempre funziona. Quando si reindirizza daNUL:, alcune applicazioni potrebbero bloccarsi, altre avranno un flusso infinito di byte `` 0x01 '', e alcuni otterranno in realtà un end-of-file immediato; il comportamento sembra dipendere da qualcosa compilato nell'applicazione stessa. Quando si reindirizza più di 4K o così aNUL:, alcune applicazioni si bloccherebbero. I problemi precedenti non si verificano con le applicazioni a 32 bit. Tutte le applicazioni DOS a 16 bit vengono eseguite in modo sincrono. Tutti gli input standard da una pipe a un'applicazione DOS a 16 bit vengono raccolti in un file temporaneo; l'altra estremità della pipe deve essere chiusa prima che l'applicazione DOS a 16 bit inizi ad essere eseguita.Tutti gli output o gli errori standard da un'applicazione DOS a 16 bit a una pipe vengono raccolti in file temporanei; l'applicazione deve terminare prima che i file temporanei vengano reindirizzati alla fase successiva della pipeline. Ciò è dovuto a una soluzione alternativa per un bug di Windows 95 nell'implementazione di pipe ed è il modo in cui la shell standard di Windows 95 gestisce le pipe. Alcune applicazioni, come ad esempiocommand.com, non dovrebbe essere eseguito in modo interattivo. Le applicazioni che accedono direttamente alla finestra della console, anziché leggere dal loro input standard e scrivere sullo standard output, potrebbero non funzionare, appendere Tcl o persino appendere il sistema se la loro finestra della console privata non è disponibile per loro. Macintosh Ilexec il comando non è implementato e non esiste sotto Macintosh. Unix Ilexec il comando è completamente funzionale e funziona come descritto. errore (n), aperto (n) esecuzione, pipeline, reindirizzamento, sottoprocesso Importante: Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico. Guarda anche
parole