Ανακατεύθυνση stdout και stderr στο Αρχείο

Redirect Stdout Stderr File



Όταν ανακατευθύνετε οποιαδήποτε έξοδο εντολών σε ένα αρχείο, θα παρατηρήσετε ότι τα μηνύματα σφάλματος εκτυπώνονται στο παράθυρο τερματικού. Οποιαδήποτε εντολή εκτελείται σε οποιοδήποτε κέλυφος Linux, όπως το bash, χρησιμοποιεί τρεις κανονικές ροές εισόδου/εξόδου. Χρησιμοποιείται ένας περιγραφέας αριθμητικών αρχείων για την αναπαράσταση κάθε ροής.

  • Η τυπική ροή εισόδου (stdin): 0
  • Η τυπική ροή εξόδου (stdout): 1
  • Η τυπική ροή σφάλματος (stderr): 2

Σε αυτήν την ανάρτηση, θα κατανοήσουμε τις πληροφορίες που εμπίπτουν στην ανακατεύθυνση του αρχείου stdout και stderr.







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

Κάθε λειτουργικό σύστημα που βασίζεται σε Linux έχει την πεποίθηση ενός προεπιλεγμένου τόπου για την εκτελεσμένη εντολή. Όλοι αναφέρονται σε αυτήν την έννοια ως stdout ή τυπική έξοδος για να κάνουν τον ήχο πιο εύκολο. Το κέλυφος Bash ή Zsh αναζητά συνεχώς την προεπιλεγμένη τοποθεσία εξόδου. Όταν το κέλυφος ανιχνεύσει νέα έξοδο, το εμφανίζει στην οθόνη του τερματικού για να το δείτε. Διαφορετικά, θα στείλει την έξοδο στην προεπιλεγμένη θέση.



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

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



Ανακατεύθυνση stdout και stderr σε αρχείο:

Καθώς η ανακατεύθυνση είναι μια μέθοδος καταγραφής μιας εξόδου προγράμματος και αποστολής της ως εισόδου σε άλλη εντολή ή αρχείο. Οι ροές εισόδου/εξόδου μπορούν να ανακατευθυνθούν θέτοντας τον τελεστή n> σε χρήση, όπου n είναι ο αριθμός περιγραφής αρχείου. Για ανακατεύθυνση του stdout, χρησιμοποιούμε 1> και για stderr, 2> προστίθεται ως τελεστής.





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



Το (command> file) θεωρείται ο κλασικός τελεστής ανακατεύθυνσης που ανακατευθύνει μόνο την τυπική έξοδο με το τυπικό σφάλμα που εμφανίζεται στο τερματικό. Θα επιδείξουμε διαφορετικές επιλογές για ανακατεύθυνση του stderr επίσης.

Ανακατεύθυνση stderr και stdout σε ξεχωριστά αρχεία:

Παρακάτω είναι η σύνταξη εντολών για ανακατεύθυνση stdout και stderr σε ξεχωριστά αρχεία.

εντολή >>έξω2>>λάθος

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

$Γάταsample.txt>>έξω2>>λάθος

Ανακατεύθυνση stderr σε stdout:

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

εντολή >>έξω2> &1$ls >>samplefile.txt2> &1

$Γάταsamplefile.txt

> out ανακατευθύνσεις ανακατευθύνει το stdout στο samplefile.txt και 2> & 1 θα ανακατευθύνει το stderr στην τρέχουσα τοποθεσία του stdout.

Εάν το stderr ανακατευθυνθεί πρώτα στο stdout, χρησιμοποιήστε την παρακάτω εντολή για να ανακατευθύνετε το stdout σε ένα αρχείο.

εντολή 2> &1 >> αρχείο$ls -στο 2> &1 >>samplefile.txt

$Γάταsamplefile.txt

Το &> χρησιμοποιείται επίσης για την ίδια λειτουργικότητα που εκτελεί 2> & 1.

εντολή &> αρχείο$ls &>samplefile.txt

$Γάταsamplefile.txt

Ανακατεύθυνση stdout και stderr σε ένα μόνο αρχείο:

Όλα τα κελύφη δεν υποστηρίζουν αυτήν την ανακατεύθυνση φόρμας, αλλά το bash και το Zsh το υποστηρίζουν. Το Stdout και το stderr μπορούν να ανακατευθυνθούν χρησιμοποιώντας την ακόλουθη σύνταξη.

εντολή &>έξω$Γάταsample.txt&>έξω

Στην επερχόμενη ενότητα του άρθρου, θα εξετάσουμε το ξεχωριστό παράδειγμα για ανακατεύθυνση stdout και stderr.

Ανακατεύθυνση του stdout σε αρχείο:

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

εντολή >> αρχείο

Χρησιμοποιούμε το sample.file για την αποθήκευση της τυπικής εξόδου της εντολής ls -al

$ls -στο >>sample.txt

$Γάταsample.txt

εντολή 1>> αρχείο$ls 1>>sample.txt

$Γάταsample.txt

Ανακατεύθυνση stderr σε αρχείο:

Χρησιμοποιήστε τον τελεστή 2> για ανακατεύθυνση του stderr σε ένα αρχείο.

εντολή 2>> αρχείο $ls -στο 2>>sample.txt

Μπορούμε να συνδυάσουμε την εκτέλεση για stderr και stdout σε μια ενιαία εντολή ανακατεύθυνσης.

εντολή 2>>error.txt1>>output.txt

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

$ls 2>>error.txt1>>output.txt

$Γάταoutput.txt

Συμπέρασμα:

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