Τερματική Παρασκευή: Τυπική ροή

Καλώς ήλθατε σε άλλη Παρασκευή ...

Ήρθε η ώρα να γνωρίσετε ένα μικρό μέρος του τερματικού σταθμού. Μετά από πολλή σκέψη αποφάσισα να δημιουργήσω μια ανάρτηση για το τυπικές ροές; Αν και θα είναι επιφανειακό, νομίζω ότι είναι κάτι που όλοι πρέπει να γνωρίζουν.

Τυπική ροή

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

Γρήγορο διάγραμμα σε τυπικές ροές.

Γρήγορο διάγραμμα σε τυπικές ροές.

Οι συνδέσεις 3 I / O είναι: stdin Τυπική είσοδος, stdout Τυπική έξοδος, stderr Τυπικό σφάλμα.

stdin: Τυπική είσοδος

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

Ο περιγραφέας είναι ένας δείκτης πρόσβασης - σε αυτήν την περίπτωση - των καναλιών εισόδου και εξόδου. Αυτές είναι τιμές int, συνήθως 0, 1 και 2.

Ένα παράδειγμα του stdin θα ήταν:

ταξινόμηση <καταχώριση

Παίρνει όλες τις πληροφορίες που περιλαμβάνονται στη λίστα - σε αυτήν την περίπτωση τους αριθμούς που γράφονται τυχαία - και κατά την ανακατεύθυνση του αρχείου στην εντολή ls, ταξινομεί την αριθμητική λίστα αλφαβητικά. Σε αυτό το παράδειγμα οι σημαίες είναι σιωπηρές.

stdout: Τυπική έξοδος

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

Τώρα θα προσπαθήσω να δημιουργήσω το stdin και το stdout με ένα σενάριο γραμμένο σε bash, απλώς και μόνο επειδή μου αρέσει bash hahaha 🙂

δοκιμή.σ

#! / bin / bash εάν [-t 0]; μετά ηχώ "Χρησιμοποιείτε stdout" elif [-t 1]; στη συνέχεια, ηχώ "Χρησιμοποιείτε stdin" αλλού ηχώ "Βίαιο σφάλμα" fi

Τώρα ένα στιγμιότυπο οθόνης που δείχνει πώς να χρησιμοποιήσετε το σενάριο. Κατά την ανακατεύθυνση ή τη χρήση σωλήνα με τη χρήση σεναρίου δοκιμή -t να γνωρίζουμε αν εκτελείται μόνο το σενάριο stdout και αν όχι είναι προφανώς stdin.

bash test.sh ls | bash test.sh bash test.sh </ etc / passwd
Το εν λόγω σενάριο και τα αποτελέσματά του ...

Το εν λόγω σενάριο και τα αποτελέσματά του ...

Θυμηθείτε να τροποποιήσετε την εντολή και να εξασκηθείτε ώστε να μάθετε.

stderr: Τυπικό σφάλμα

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

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

ls> info.txt

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

Αντ 'αυτού, αν χρησιμοποιήσουμε το 2> για να υποδείξουμε την αποθήκευση stderr στο αρχείο:

ls foo 2> info.txt

Τώρα θα αποθηκεύσει τις πληροφορίες σφάλματος στο αρχείο κειμένου.

Πλέον κέλυφος επιτρέψτε στο stderr και το stdout να αποθηκευτούν σε μία εντολή εντολής με &> όπου το Foo είναι ανύπαρκτος κατάλογος

Λήψεις Foo &> info.txt

Αυτό το αρχείο θα περιέχει τις πληροφορίες του σφάλματος κατά την εκτέλεση ls στο Foo και θα παραθέτει τους καταλόγους στην ενότητα Λήψεις.

Και τέλος, τι κάνει αυτό διάσημο 2> & 1?

Απλό, ανακατευθύνετε το stderr στο stdout. Αυτό & στο μέσο> και 1 σημαίνει ότι θα ανακατευθύνει στο stdout. Εάν δεν ήταν εκεί, θα ήταν κάτι σαν ... "ανακατευθύνετε το σφάλμα στο αρχείο 1".

Και με αυτό είναι δυνατή η ανακατεύθυνση:

  • stdout σε ένα αρχείο
  • stderr σε ένα αρχείο
  • stdout στο stderr
  • stderr έως stdout
  • stderr και stdout σε ένα αρχείο
  • μεταξύ άλλων

Αυτό είναι για τους σημερινούς ανθρώπους. Διαβάζουμε και σας ευχαριστούμε που σταματήσατε. 😀


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.

  1.   eliotime3000 dijo

    Ενδιαφέρων. Χάρη στα μαθήματά σας, μου αρέσει πολύ το Bash.

  2.   Quincy magoo dijo

    Αγαπητέ, ενδιαφέρον, ωστόσο έχετε ένα σφάλμα στην ακόλουθη γραμμή:

    "Και κατά την ανακατεύθυνση του αρχείου στην εντολή ls", θα πρέπει να είναι "και κατά την ανακατεύθυνση του αρχείου στην εντολή ταξινόμησης".

    Ένα χαιρετισμό.

  3.   Miguel dijo

    Υπάρχει ένα σφάλμα στην αρχή του κειμένου, όταν υποδεικνύετε την εντολή "ls", θα πρέπει να είναι "ταξινόμηση":
    "Πάρτε όλες τις πληροφορίες που περιλαμβάνονται στη λίστα - σε αυτήν την περίπτωση οι αριθμοί που γράφονται τυχαία - και ανακατευθύνετε το αρχείο στην εντολή ls (εδώ θα ήταν ταξινόμηση)"

    Χαιρετίσματα και ευχαριστίες που μοιραστήκατε τη δουλειά σας

  4.   οδικός dijo

    Αυτό είναι ιδανικό για το cron, όπου θέλετε η έξοδος να ξεπλυθεί (/ dev / null), αλλά τα σφάλματα να αποθηκευτούν σε αρχεία. Επίσης, όταν το κάνω αυτό, συνήθως χρησιμοποιώ την εντολή ημερομηνίας για να καθορίσω ακριβώς πότε απέτυχαν.

    Ο Bash (sh) έχει αυτά τα εργαλεία που έχουν αναπτυχθεί τόσο από τη φιλοσοφία του Unix "κάντε ένα πράγμα, και κάντε το καλά"

  5.   Lolo dijo

    Λοιπόν, δεν έχω ανακαλύψει τίποτα

    1.    Φωνή dijo

      Χαχα καλά εξηγείται αρκετά καλά, τι δεν έχετε καταλάβει;