Ανακατεύθυνση Εισόδου/Εξόδου
Κάθε εντολή ή πρόγραμμα που εκτελούμε χρησιμοποιεί κάποια πρότυπα αρχεία για επικοινωνία με το χρήστη. Συγκεκριμένα, ένα πρότυπο αρχείο εισόδου το οποίο μεταφέρει πληροφορίες από το χρήστη προς το πρόγραμμα και δύο πρότυπα αρχεία εξόδου που μεταφέρουν πληροφορίες από το πρόγραμμα προς το χρήστη. Το αρχείο εισόδου συναντάται πιο συχνά ως standard input ή stdin, ενώ τα αρχεία εξόδου ως standard output ή stdout και standard error ή stderr. Το πρότυπο αρχείο λαθών (stderr) υπάρχει για να μπορούμε να διαχωρίσουμε τις αμιγείς πληροφορίες του προγράμματος (δηλαδή αυτές που πραγματικά μας ενδιαφέρουν) από τα μηνύματα λάθους που πιθανόν να προκύψουν κατά την εκτέλεση του.
Τα πρότυπα αρχεία αποτελούν συμβολισμούς που κάθε φορά αντιστοιχούν σε πραγματικά αρχεία, όπως για παράδειγμα το τερματικό σας, ένα αρχείο στο δίσκο, μια σειριακή θύρα, μια απομακρυσμένη σύνδεση TELNET, κλπ. Αν φυσικά χρησιμοποιείτε την εντολή διαλεκτικά (interactively) σε ένα κέλυφος τα πρότυπα αρχεία αντιστοιχούν στην είσοδο και έξοδο του κελύφους (το πληκτρολόγιο και η οθόνη του τερματικού του κελύφους αντίστοιχα).
Πολλές φορές είναι χρήσιμο να μπορούμε να ανακατευθύνουμε την είσοδο ή την έξοδο από και προς κάποιο άλλο αρχείο αντίστοιχα. Για παράδειγμα, αν ένα πρόγραμμα μας ζητάει κάθε φορά να εισάγουμε αρκετές παραμέτρους, θα μας διευκόλυνε αρκετά να μπορούσαμε να καταγράψουμε αυτές τις παραμέτρους σε ένα αρχείο κειμένου για να το χρησιμοποιήσουμε ως είσοδο στο πρόγραμμα που εκτελούμε. Παρομοίως, ένα πρόγραμμα που παράγει μεγάλη ποσότητα πληροφορίας, μπορούμε να το κατευθύνουμε έτσι ώστε η πληροφορία να εξάγεται σε ένα αρχείο κειμένου για να την επεξεργαστούμε.
Ας υποθέσουμε ότι έχουμε ένα απλό πρόγραμμα στατιστικών το οποίο βγάζει τη μέση τιμή χρησιμοποιώντας τα στοιχεία που του δίνουμε στην είσοδο:
$ calcavg Please enter data: 10.0 11.2 13.4 15.6 14.5 11.0 Average is = 12.62
Αν έχουμε κάνει κάποιο λάθος σε μία τιμή θα πρέπει να τις εισάγουμε ξανά όλες στο πρόγραμμα. Στο παράδειγμά μας η διπλή εισαγωγή στοιχείων δεν είναι και τόσο τραγικό γεγονός, αλλά υπάρχουν περιπτώσεις με χιλιάδες ή εκατομύρια πεδία όπου η εισαγωγή τους για δεύτερη φορά είναι μάλλον καταστροφή.
Ακριβώς για αυτόν το λόγο θα πρέπει να χρησιμοποιήσουμε την ανακατεύθυνση εισόδου. Έστω ότι κατασκευάζουμε ένα αρχείο κειμένου data.txt με τα περιεχόμενα των τιμών:
10.0 11.2 13.4 15.6 14.5 11.0
Τώρα αρκεί να εκτελέσουμε το πρόγραμμα calcavg χρησιμοποιώντας το data.txt ως είσοδο:
$ calcavg < data.txt Please enter data: Average is = 12.62
Με αυτόν τον τρόπο μπορούμε να διορθώσουμε, να προσθέσουμε ή να αφαιρέσουμε τιμές εύκολα. Αρκεί να εκτελέσουμε για δεύτερη φορά το πρόγραμμα για να έχουμε το αποτέλεσμα.
Η ανακατεύθυνση εξόδου λειτουργεί με παρόμοιο τρόπο. Ας υποθέσουμε ότι έχουμε μια λίστα ονομάτων σε ένα αρχείο names.txt την οποία θα θέλαμε να ταξινομήσουμε αλφαβητικά ως προς το επώνυμο (που στο αρχείο είναι η δεύτερη στήλη). Κάτι τέτοιο μπορεί πολύ ευκολα να γίνει με την εντολή sort. Συγκεκριμένα:
$ sort -k 2 names.txt
Η εντολή αυτή θα μας τυπώσει στην πρότυπη έξοδο (stdout) την ταξινομημένη λίστα των ονομάτων. Για να την ανακατευθύνουμε σε ένα αρχείο θα χρησιμοποιήσουμε το χαρακτήρα > :
$ sort -k 2 names.txt > sortednames.txt
Το αρχείο sortednames.txt περιέχει την επιθυμητή λίστα. (Σημείωση: η εντολή sort παρέχει μια επιλογή για απευθείας αποθήκευση των αποτελεσμάτων σε αρχείο, την -o/--output, που έχει το ίδιο αποτέλεσμα με την ανακατεύθυνση, βλ. σελ. ).
Στην περίπτωση που το αρχείο sortednames.txt προϋπάρχει, τα περιεχόμενά του θα αντικατασταθούν από τη νέα λίστα. Αν δε θέλουμε κάτι τέτοιο αλλά απλώς να προσθέσουμε μια νέα λίστα, θα πρέπει να χρησιμοποιήσουμε τους χαρακτήρες >>.
$ sort -k 2 names.txt >> sortednames.txt
Η ανακατεύθυνση του προτύπου αρχείου λαθών μπορεί να γίνει χρησιμοποιώντας το πρόθεμα 2 πριν το χαρακτήρα >. Δηλαδή η εντολή
$ command 2> errorfile
θα αποθηκεύσει πιθανά μηνύματα λάθους στο αρχείο errorfile. Αυτό είναι πολύ χρήσιμο ειδικά για προγράμματα που τρέχουν ως δαίμονες (daemons) και δεν είναι δυνατή η συνεχής παρακολούθησή τους σε ένα τερματικό.
Στο κέλυφος bash, είναι δυνατόν να ανακατευθύνουμε στο ίδιο αρχείο και το πρότυπο αρχείο εξόδου (stdout) και το πρότυπο αρχείο λαθών (stderr) χρησιμοποιώντας τη συντόμευση >&.
$ command >& logfile
Active forum topics
- Wake up from suspend mode failed
- Οργάνωση στις μεταφράσεις των ελληνικών στο Debian.
- απορια σχετικα με nvidia440
- πρόβλημα εγκατάστασης nvidia driver GTS250.
- kernel 2.6.38 για squeeze
- Gnome3
- 2 μήνες σπασμένο το upgrade σε unstable [SOLVED]
- Οι χρήστες του Internet Explorer είναι χαζοί;
- Debian Lenny + Nvidia drivers
- εγκατασταση usb cosmote
New forum topics
Νέοι χρήστες
- kountp
- Adonthegreat
- giorgos_m
- prodromos
- airmaik
Οι πιο πρόσφατες καταχωρίσεις blog.
- Fosscomm 2012
- armhf officially into Debian!
- back from UDS/Linaro Connect...
- FTF is over, Linaro Interview
- straight from FTF 2011, San Antonio...
- Όσο μεγαλώνεις μαθαίνεις...
- Emdebian 2011 Sprint report, Genesi Europe store goes online...
- Θεσσαλονίκη - open source ERP workshop
- Χρήσιμο URL για Flash Cards και Linux filesystems
- Cambridge, UK, ARM HQ for Emdebian 2011 Sprint