Δημοσιεύτηκε: 31 Αύγ 2011, 00:37
από lucinos
Ήδη ξέρετε τα βασικότερα σχετικά με την είσοδο και την έξοδο. Ότι δηλαδή η κανονική έξοδος είναι αυτό που τυπώνει το πρόγραμμα. Και επίσης είδαμε και την περίπτωση τών σωλήνων όπου δίνουμε την έξοδο μιας εντολής ως είσοδο σε μια άλλη, ένα πολύ σημαντικό χαρακτηριστικό.

Ένα ενδιαφέρον προγραμματάκι που δεν έτυχε να δούμε είναι το cat
Στον προτροπέα τρέξτε:
Κώδικας: Επιλογή όλων
cat

Σε αυτό το σημείο ίσως νομίζετε ότι έχει κρεμάσει. Για να δείτε ότι δεν είναι καθόλου έτσι αρχίστε να γράφετε όττι θέλετε. Κάθε φορά που θα πατάτε Enter το πρόγραμμα θα επιστρέφει την είσοδο (αυτά που γράφετε) στην έξοδο (δηλαδή θα επαναλαμβάνει όττι γράφετε) και θα σάς αφήνει να συνεχίσετε. Θα μπορούσατε να διακόψετε βίαια το πρόγραμμα με Ctrl+c όπως έχουμε δει αλλά μπορείτε να πείτε ότι το "αρχείο" τελείωσε με τον συνδυασμό Ctrl+d. Με την ευκαιρία θυμηθείτε ότι για τα unix-οειδή τα πάντα είναι αρχεία και επομένως όταν πληκτρολογείτε αυτό δεν διαφέρει από την ανάγνωση ενός αρχείου από τον υπολογιστή. Αν δώσετε Ctrl+d στον προτροπέα αυτό είναι ισοδύναμο με την εντολή exit (είναι σαν να λέτε ότι τερματίζετε την είσοδο προς το bash)

Αντί για να δώσουμε το cat μόνο του και να περιμένει είσοδο από το πληκτρολόγιο μπορούμε να τού δώσουμε σαν είσοδο το αποτέλεσμα μιας άλλης εντολής με τον σωλήνα ή μπορούμε να δώσουμε ένα αρχείο με το <
Πάτε στο ~/playground εκεί από τα προηγούμενα έχουμε αντιγράψει το fstab και δώστε στον προτροπέα:
Κώδικας: Επιλογή όλων
cat < fstab

Θα διαβάσει το αρχείο fstab και θα σάς επιστρέψει στον προτροπέα.
Συνήθως τα προγράμματα στα οποία θα θέλαμε να κάνουν κάτι τέτοιο μάς δίνουν την δυνατότητα να το κάνουμε από τα ορίσματα. Θα το θυμάστε αυτό από την less, το ίδιο ισχύει και με την cat, δηλαδή:
Κώδικας: Επιλογή όλων
cat fstab

λειτουργεί εξίσου καλά. Αυτό κάνει το < κάπως αχρείαστο. Το αντίθετό του όμως > είναι πιο χρήσιμο. Με:
Κώδικας: Επιλογή όλων
cat > dog

Γράφουμε στο αρχείο dog. Έχουμε πρακτικά έναν από τούς απλούστερους κειμενογράφους που μπορούν να υπάρξουν.

Ένα ακόμα παράδειγμα χρήσης τής ανακατεύθυνσης > είναι το:
Κώδικας: Επιλογή όλων
ls -lahF ~ > ls-my_home

σώζετε το αποτέλεσμα στο αρχείο ls-my_home
Επίσης το:
Κώδικας: Επιλογή όλων
> keno

δημιουργεί ένα κενό αρχείο keno (ένα ωραίο κολπάκι)

Μπορεί την έξοδο να θέλουμε να την πετάξουμε. Αυτό γίνεται αν δώσουμε σαν αρχείο εξόδου το /dev/null (δείτε και το σχετικό αρθράκι τής Βικιπαίδειας)

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

Κάτι ακόμα πολύ σημαντικό. Το > δίνει την κανονική έξοδο στο αρχείο. Τα σφάλματα περνάνε από διαφορετική έξοδο. Αν λοιπόν δώσετε (δεν υπάρχει αρχείο/φάκελος krom):
Κώδικας: Επιλογή όλων
ls krom > ls-krom

θα δημιουργηθεί ένα κενό αρχείο ls-krom και το μήνυμα σφάλματος θα τυπωθεί κανονικά στην οθόνη. Αν θέλουμε να ανακατευθύνουμε το μήνυμα σφάλματος αντί για την κανονική έξοδο χρησιμοποιούμε το 2> και αν θέλουμε να ανακατευθύνουμε και τα δυο (κανονική έξοδο και σφάλματα) υπάρχει το &> (για τις νεώτερες σχετικά εκδόσεις τού bash, στις παλιότερες είναι ελαφρώς πιο παράξενο)

Σχετικά με τις ανακατευθύνσεις υπάρχει αυτό το άρθρο τής Βικιπαίδειας