Exec - εντολή Linux - εντολή Unix

exec - Επίκληση υποεπεξεργασίας

Σύνοψη

exec ; διακόπτες ; arg ; arg ... ;

Περιγραφή

Αυτή η εντολή αντιμετωπίζει τα επιχειρήματά της ως προδιαγραφή μιας ή περισσοτέρων υποέργων για εκτέλεση. Τα επιχειρήματα παίρνουν τη μορφή ενός τυποποιημένου αγωγού, όπου κάθε arg γίνεται μία λέξη μιας εντολής και κάθε ξεχωριστή εντολή γίνεται υποεπεξεργασία.

Εάν τα αρχικά επιχειρήματα που ξεκινούν με την εκτέλεση - τότε αντιμετωπίζονται ως διακόπτες γραμμής εντολών και δεν αποτελούν μέρος της προδιαγραφής του αγωγού. Οι ακόλουθοι διακόπτες υποστηρίζονται αυτήν τη στιγμή:

-keepnewline

Διατηρεί μια νέα γραμμή στην έξοδο του αγωγού. Κανονικά θα διαγραφεί μια νέα γραμμή.

-

Σηματοδοτεί το τέλος των διακοπτών. Το επιχείρημα που ακολουθεί αυτό θα θεωρηθεί ως το πρώτο arg ακόμα κι αν ξεκινά με ένα - .

Εάν ένα arg (ή ζεύγος arg 's) έχει μία από τις μορφές που περιγράφονται παρακάτω, τότε χρησιμοποιείται από το exec για τον έλεγχο της ροής εισόδου και εξόδου μεταξύ των υποεπεξεργασιών. Αυτά τα επιχειρήματα δεν θα μεταβιβαστούν στην υποεπεξεργασία (-ες). Σε μορφές όπως `` < fileName '' το όνομα_φαρμάκου μπορεί να είναι είτε σε ξεχωριστό όρισμα από το `` <'' είτε στο ίδιο όρισμα χωρίς παρεμβαλλόμενο χώρο (δηλ. `` FileName '').

|

Διαχωρίζει ξεχωριστές εντολές στον αγωγό. Η τυπική έξοδος της προηγούμενης εντολής θα μεταφερθεί στην τυπική είσοδο της επόμενης εντολής.

& &

Διαχωρίζει ξεχωριστές εντολές στον αγωγό. Τόσο η τυπική έξοδος όσο και το τυπικό σφάλμα της προηγούμενης εντολής θα διοχετευθούν στην τυποποιημένη είσοδο της επόμενης εντολής. Αυτή η μορφή ανακατεύθυνσης αντικαθιστά μορφές όπως 2> και> &.

< fileName

Το αρχείο που ονομάζεται με όνομα_αρχείου ανοίγει και χρησιμοποιείται ως πρότυπη είσοδος για την πρώτη εντολή που βρίσκεται στο αγωγό.

<@ fileId

Το FileId πρέπει να είναι το αναγνωριστικό για ένα ανοιχτό αρχείο, όπως η τιμή επιστροφής από μια προηγούμενη κλήση για άνοιγμα . Χρησιμοποιείται ως η τυπική είσοδος για την πρώτη εντολή στον αγωγό. Το αρχείο FileId πρέπει να έχει ανοιχτεί για ανάγνωση.

<< αξία

Η τιμή μεταβιβάζεται στην πρώτη εντολή ως τυπική είσοδο.

> Όνομα_αρχείου

Η τυπική έξοδος από την τελευταία εντολή ανακατευθύνεται στο αρχείο με όνομα fileName , αντικαθιστώντας τα προηγούμενα περιεχόμενά της.

2> Όνομα_αρχείου

Το τυπικό σφάλμα από όλες τις εντολές του αγωγού διοχετεύεται στο αρχείο με όνομα 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-υποκατάσταση γίνεται σε αυτό, και αν το αποτέλεσμα δεν περιέχει πτέρυγες, τότε οι κατάλογοι στη μεταβλητή περιβάλλοντος PATH αναζητούνται για ένα εκτελέσιμο με το όνομα. Εάν το όνομα περιέχει μια κάθετο, τότε πρέπει να αναφέρεται σε ένα εκτελέσιμο αρχείο το οποίο μπορεί να φτάσει στον τρέχοντα κατάλογο. Δεν εκτελείται επέκταση "glob" ή άλλες αντικαταστάσεις τύπου κελύφους στα επιχειρήματα σε εντολές.

Θέματα φορητότητας

Windows (όλες οι εκδόσεις)

Η ανάγνωση ή η εγγραφή σε μια υποδοχή, χρησιμοποιώντας τη σημείωση `` @ fileId '', δεν λειτουργεί. Κατά την ανάγνωση από μια πρίζα, μια εφαρμογή DOS 16 bit θα κρεμάσει και μια εφαρμογή 32 bit θα επιστρέψει αμέσως με το τέλος του αρχείου. Όταν ένας από τους δύο τύπους εφαρμογών γράφει σε μια πρίζα, οι πληροφορίες αποστέλλονται στην κονσόλα, αν υπάρχει, ή απορρίπτεται.

Το γραφικό στοιχείο κειμένου κονσόλας Tk δεν παρέχει πραγματικές δυνατότητες IO. Κάτω από το Tk, κατά την ανακατεύθυνση από την τυπική είσοδο, όλες οι εφαρμογές θα δουν ένα άμεσο τέλος του αρχείου. οι πληροφορίες που ανακατεύονται στην τυπική έξοδο ή το τυπικό σφάλμα θα απορριφθούν.

Είτε προς τα εμπρός είτε προς τα πίσω είναι αποδεκτές ως διαχωριστές διαδρομής για επιχειρήματα στις εντολές Tcl. Κατά την εκτέλεση μιας εφαρμογής, το όνομα διαδρομής που καθορίζεται για την εφαρμογή μπορεί επίσης να περιέχει πρόωρες ή οπίσθιες περικοπές ως διαχωριστές διαδρομής. Λάβετε, ωστόσο, υπόψη ότι οι περισσότερες εφαρμογές των Windows δέχονται επιχειρήματα με εμπρόσθια κλίση μόνο ως οριοθέτες επιλογών και οπίσθια όψη μόνο στις διαδρομές. Οποιαδήποτε επιχειρήματα σε μια εφαρμογή που καθορίζει ένα όνομα διαδρομής με εμπρόσθια πτερύγια δεν μετατρέπονται αυτόματα για να χρησιμοποιηθεί ο χαρακτήρας αντίστροφης κάθετος. Εάν ένα όρισμα περιέχει πρόχειρες περικοπές ως διαχωριστικό διαδρομής, αυτό μπορεί να είναι ή να μην αναγνωρίζεται ως όνομα διαδρομής, ανάλογα με το πρόγραμμα.

Επιπλέον, όταν καλείτε μια εφαρμογή 16-bit DOS ή Windows 3.X, όλα τα ονόματα διαδρομών πρέπει να χρησιμοποιούν τη σύντομη, κρυπτική μορφή διαδρομής (π.χ., χρησιμοποιώντας το `` applba ~ 1.def '' αντί για `` applbakery.default '' ).

Δύο ή περισσότερες προς τα εμπρός ή προς τα πίσω περικοπές σε μια σειρά σε μια διαδρομή αναφέρονται σε μια διαδρομή δικτύου. Για παράδειγμα, μια απλή συνένωση του ριζικού καταλόγου c: / με έναν υποκατάλογο / παράθυρα / σύστημα θα αποφέρει c: // windows / system (δύο πτερύγια μαζί), που αναφέρεται στο σημείο πρόσδεσης που ονομάζεται σύστημα στο μηχάνημα που ονομάζεται windows το c: / αγνοείται) και δεν είναι ισοδύναμο με το c: / windows / system , το οποίο περιγράφει έναν κατάλογο στον τρέχοντα υπολογιστή. Η εντολή join file θα πρέπει να χρησιμοποιηθεί για τη συγκράτηση των στοιχείων της διαδρομής.

Windows NT

Όταν προσπαθείτε να εκτελέσετε μια εφαρμογή, εκτελέστε πρώτα την αναζήτηση για το όνομα όπως καθορίστηκε. Στη συνέχεια, με την σειρά, τα .com , .exe και .bat προσαρτώνται στο τέλος του καθορισμένου ονόματος και αναζητούν το μεγαλύτερο όνομα. Εάν ένα όνομα καταλόγου δεν καθορίστηκε ως μέρος του ονόματος της εφαρμογής, οι ακόλουθοι κατάλογοι αναζητούνται αυτόματα κατά σειρά κατά την προσπάθεια εντοπισμού της εφαρμογής:

Ο κατάλογος από τον οποίο φορτώθηκε το εκτελέσιμο Tcl.
Ο τρέχων κατάλογος.
Ο κατάλογος συστήματος 32 bit των Windows NT.
Ο κατάλογος συστήματος Windows NT 16-bit.
Ο αρχικός κατάλογος των Windows NT.
Οι κατάλογοι που αναφέρονται στη διαδρομή.

Για να εκτελέσει τις ενσωματωμένες εντολές κελύφους, όπως το dir και το αντίγραφο , ο καλών πρέπει να προετοιμάσει `` cmd.exe / c '' στην επιθυμητή εντολή.

Windows 95

Όταν προσπαθείτε να εκτελέσετε μια εφαρμογή, εκτελέστε πρώτα την αναζήτηση για το όνομα όπως καθορίστηκε. Στη συνέχεια, με την σειρά, τα .com , .exe και .bat προσαρτώνται στο τέλος του καθορισμένου ονόματος και αναζητούν το μεγαλύτερο όνομα. Εάν ένα όνομα καταλόγου δεν καθορίστηκε ως μέρος του ονόματος της εφαρμογής, οι ακόλουθοι κατάλογοι αναζητούνται αυτόματα κατά σειρά κατά την προσπάθεια εντοπισμού της εφαρμογής:

Ο κατάλογος από τον οποίο φορτώθηκε το εκτελέσιμο Tcl.
Ο τρέχων κατάλογος.
Ο κατάλογος συστήματος των Windows 95.
Ο αρχικός κατάλογος των Windows 95.
Οι κατάλογοι που αναφέρονται στη διαδρομή.

Για να εκτελέσει τις εντολές ενσωματωμένου κελύφους, όπως dir και copy , ο καλών πρέπει να προετοιμάσει `` command.com / c '' στην επιθυμητή εντολή.

Μόλις μια εφαρμογή DOS 16-bit έχει διαβάσει την τυποποιημένη είσοδο από μια κονσόλα και στη συνέχεια τερματίσει, όλα τα επόμενα προγράμματα DOS 16 bit θα δουν την τυπική είσοδο ως ήδη κλειστή. Οι εφαρμογές 32-bit δεν έχουν αυτό το πρόβλημα και θα λειτουργούν σωστά, ακόμα και μετά από μια εφαρμογή DOS 16 bit που πιστεύει ότι η τυπική είσοδος είναι κλειστή. Δεν υπάρχει γνωστός τρόπος αντιμετώπισης αυτού του σφάλματος αυτή τη στιγμή.

Η ανακατεύθυνση μεταξύ της συσκευής NUL: και μιας εφαρμογής 16 bit δεν λειτουργεί πάντα. Κατά την ανακατεύθυνση από το NUL:, μερικές εφαρμογές μπορεί να κρεμάσουν, άλλοι θα πάρουν μια άπειρη ροή των `` 0x01 '' bytes, και μερικές θα πάρουν πραγματικά ένα άμεσο τέλος του αρχείου. η συμπεριφορά φαίνεται να εξαρτάται από κάτι που έχει συγκεντρωθεί στην ίδια την εφαρμογή. Όταν κάνετε ανακατεύθυνση μεγαλύτερη από 4K ή κάτι τέτοιο σε NUL:, ορισμένες εφαρμογές θα κολλήσουν. Τα παραπάνω προβλήματα δεν συμβαίνουν σε εφαρμογές 32 bit.

Όλες οι εφαρμογές 16-bit DOS εκτελούνται συγχρονισμένα. Όλες οι τυποποιημένες εισόδους από έναν αγωγό σε μια εφαρμογή DOS 16-bit συλλέγονται σε ένα προσωρινό αρχείο. το άλλο άκρο του σωλήνα πρέπει να κλείσει πριν ξεκινήσει η εκτέλεση της εφαρμογής DOS 16 bit. Όλες οι τυποποιημένες εξόδους ή λάθη από μια εφαρμογή DOS 16-bit σε ένα σωλήνα συλλέγονται σε προσωρινά αρχεία. η εφαρμογή πρέπει να τερματιστεί πριν από την ανακατεύθυνση των προσωρινών αρχείων στο επόμενο στάδιο του αγωγού. Αυτό οφείλεται σε μια λύση για ένα σφάλμα των Windows 95 στην εφαρμογή των σωλήνων και είναι το πώς το τυποποιημένο κέλυφος των Windows 95 DOS χειρίζεται τους ίδιους τους σωλήνες.

Ορισμένες εφαρμογές, όπως το command.com , δεν θα πρέπει να εκτελούνται διαδραστικά. Οι εφαρμογές που έχουν άμεση πρόσβαση στο παράθυρο της κονσόλας, αντί να διαβάζουν από την τυπική είσοδο και τη γραφή τους στην τυπική έξοδο τους, ενδέχεται να αποτύχουν, να κρεμάσουν Tcl ή ακόμα και να κρεμάσουν το σύστημα εάν δεν είναι διαθέσιμο το δικό τους παράθυρο κονσόλας.

Γκαμπαρντίνα

Η εντολή exec δεν υλοποιείται και δεν υπάρχει στο Macintosh.

Unix

Η εντολή exec είναι πλήρως λειτουργική και λειτουργεί όπως περιγράφεται.

Δείτε επίσης

σφάλμα (n), ανοικτό (n)

Λέξεις κλειδιά

εκτέλεση, αγωγός, ανακατεύθυνση, υποέργο

Σημαντικό: Χρησιμοποιήστε την εντολή man ( % man ) για να δείτε πώς χρησιμοποιείται μια εντολή στον υπολογιστή σας.