Πώς να χρησιμοποιήσετε την εντολή ναι στο Linux

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

Η εντολή ναι

Η εντολή ναι είναι μία από τις απλούστερες εντολές στο Linux και σε άλλα λειτουργικά συστήματα παρόμοια με το Unix όπως το macOS. Και με το απλό, εννοούμε απλό στη χρήση και στην αρχική του εφαρμογή. Ο πηγαίος κώδικας για την αρχική έκδοση—κυκλοφόρησε στο System 7 Unix και συντάχθηκε από Κεν Τόμσον— ισοδυναμεί με ένα απλό έξι γραμμές κώδικα.

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

Τι κάνει το ναι;

Χρησιμοποιείται χωρίς παραμέτρους γραμμής εντολών, η εντολή yes συμπεριφέρεται σαν να πληκτρολογείτε “y” και να πατάτε Enter, ξανά και ξανά (και ξανά και ξανά). Πολύ γρήγορα. Και θα συνεχίσει να το κάνει μέχρι να πατήσετε Ctrl+C για να το διακόψετε.

yes

Στην πραγματικότητα, το ναι μπορεί να χρησιμοποιηθεί για τη δημιουργία επανειλημμένων μηνυμάτων που επιλέγετε. Απλώς πληκτρολογήστε ναι, ένα κενό διάστημα, τη συμβολοσειρά που θέλετε να χρησιμοποιήσετε και, στη συνέχεια, πατήστε Enter. Αυτό χρησιμοποιείται συχνά για να προκαλέσει το ναι να δημιουργήσει μια ροή εξόδου συμβολοσειρών “ναι” ή “όχι”.

yes yes

yes anything you like

Αλλά τι χρήση είναι αυτό;

Η έξοδος από το yes μπορεί να μεταφερθεί σε άλλα προγράμματα ή σενάρια.

Ακούγεται γνώριμο αυτό; Ξεκινάς μια μακρά διαδικασία τρέχοντας και απομακρύνεσαι, αφήνοντάς την να τρέξει. Όταν επιστρέψετε στον υπολογιστή σας, η διαδικασία δεν έχει ολοκληρωθεί καθόλου. Σε περίπτωση απουσίας σας, σας έχει κάνει μια ερώτηση και περιμένει μια απάντηση «ναι» ή «όχι».

Εάν γνωρίζετε εκ των προτέρων ότι όλες οι απαντήσεις σας θα είναι θετικές (“ναι” ή “y”) ή αρνητικές (“όχι” ή “n”), μπορείτε να χρησιμοποιήσετε το ναι για να παρέχετε αυτές τις απαντήσεις για εσάς. Στη συνέχεια, η μακροχρόνια διαδικασία θα ολοκληρωθεί χωρίς επίβλεψη, με το ναι να παρέχει τις απαντήσεις σε τυχόν ερωτήσεις που θέτει η διαδικασία.

  Οι 4 καλύτερες διανομές Linux που πρέπει να δοκιμάσετε

Χρήση Yes With Scripts

Κοιτάξτε το ακόλουθο σενάριο κελύφους Bash. (Πρέπει να φανταστούμε ότι αυτό είναι μέρος ενός πολύ μεγαλύτερου σεναρίου που θα χρειαστεί πολύς χρόνος για να τρέξει.)

#!/bin/bash

# ...
# in the middle of some long script
# obtain a response from the user
# ...

echo "Are you happy to proceed? [y,n]"
read input

# did we get an input value?
if [ "$input" == "" ]; then

   echo "Nothing was entered by the user"

# was it a y or a yes?
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "Positive response: $input"

# treat anything else as a negative response
else

   echo "negative response: $input"

fi

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

Ένα «ναι» ή «y» υποδηλώνει θετική απάντηση.
Οποιαδήποτε άλλη εισαγωγή θεωρείται αρνητική απάντηση.
Πατώντας Enter χωρίς εισαγωγή κειμένου δεν γίνεται τίποτα.

Για να το δοκιμάσετε, αντιγράψτε το σενάριο σε ένα αρχείο και αποθηκεύστε το ως long_script.sh. Χρησιμοποιήστε το chmod για να το κάνετε εκτελέσιμο.

chmod +x long_script.sh

Εκτελέστε το σενάριο με την ακόλουθη εντολή. Δοκιμάστε να δώσετε “ναι”, “y” και οτιδήποτε άλλο ως είσοδο, συμπεριλαμβανομένου του πλήκτρου Enter χωρίς εισαγωγή κειμένου.

./long_script.sh

Για να λάβετε ναι για να απαντήσουμε στην ερώτηση του σεναρίου, διοχετεύστε το αποτέλεσμα από το ναι στο σενάριο.

yes | ./long_script.sh

Ορισμένα σενάρια είναι πιο άκαμπτα στις απαιτήσεις τους και δέχονται μόνο την πλήρη λέξη «ναι» ως θετική απάντηση. Μπορείτε να δώσετε το “ναι” ως παράμετρο στο yes, ως εξής:

yes yes | ./long_script.sh

Μην πείτε ναι χωρίς να το σκεφτείτε

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

  Πώς να χρησιμοποιήσετε το Shazam στην επιφάνεια εργασίας Linux με το SongRec

Η λογική στο σενάριο, την εντολή ή το πρόγραμμα ενδέχεται να μην ταιριάζει με τις προσδοκίες σας. Στο παράδειγμά μας σενάριο, η ερώτηση μπορεί να ήταν «Θέλετε να σταματήσετε; [y,n].» Εάν συνέβαινε αυτό, μια αρνητική απάντηση θα επέτρεπε στο σενάριο να προχωρήσει.

Πρέπει να είστε εξοικειωμένοι με το σενάριο, την εντολή ή το πρόγραμμα προτού βάλετε το ναι σε αυτό.

Χρήση ναι με εντολές

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

Ας πάρουμε ως παράδειγμα τον διαχειριστή πακέτων του Ubuntu apt-get. Για να εγκαταστήσετε μια εφαρμογή χωρίς να χρειάζεται να πατήσετε το “y” μέχρι τη μέση της εγκατάστασης, το yes θα είχε χρησιμοποιηθεί ως εξής:

yes | sudo apt-get install fortune-mod

Το ίδιο αποτέλεσμα μπορεί να επιτευχθεί χρησιμοποιώντας την επιλογή -y (υποθέτουμε ναι) στο apt-get:

sudo apt-get -y install fortune-mod

Θα δείτε ότι το apt-get δεν ρώτησε καν το συνηθισμένο «Θέλετε να συνεχίσετε; [Y/n]” ερώτηση. Απλώς υπέθεσε ότι η απάντηση θα ήταν «ναι».

Σε άλλες διανομές Linux, η κατάσταση είναι η ίδια. Στο Fedora θα χρησιμοποιούσατε αυτόν τον τύπο εντολής διαχείρισης πακέτων ταυτόχρονα:

yes | yum install fortune-mod

Ο διαχειριστής πακέτων dnf έχει αντικαταστήσει το yum και το dnf έχει τη δική του επιλογή -y (υποθέστε ναι).

dnf -y install fortune-mod

Το ίδιο ισχύει για τα cp, fsck και rm. Αυτές οι εντολές έχουν η καθεμία τις δικές τους επιλογές -f (force) ή -y (υποθέστε ναι).

Φαίνεται λοιπόν ότι το ναι έχει υποβιβαστεί στην εργασία μόνο με σενάρια; ΟΧΙ ακριβως. Υπάρχουν ακόμα μερικά κόλπα στο γέρο σκυλί.

Μερικά περαιτέρω ναι κόλπα

Μπορείτε να χρησιμοποιήσετε το yes με μια ακολουθία ψηφίων που δημιουργείται από seq για να ελέγξετε έναν βρόχο επαναλαμβανόμενων ενεργειών.

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

  Πώς να παίξετε το Dead Rising 4 στο Linux

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

yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

Μερικές φορές είναι χρήσιμο να έχετε ένα μεγάλο αρχείο για δοκιμή. Ίσως θέλετε να εξασκηθείτε χρησιμοποιώντας την εντολή zip ή θέλετε να έχετε ένα μεγάλο αρχείο για να δοκιμάσετε τις μεταφορτώσεις FTP.

Μπορείτε να δημιουργήσετε γρήγορα μεγάλα αρχεία με το ναι. Το μόνο που χρειάζεται να κάνετε είναι να του δώσετε μια μεγάλη συμβολοσειρά κειμένου για να εργαστείτε και να ανακατευθύνετε την έξοδο σε ένα αρχείο. Μην κάνετε κανένα λάθος. αυτά τα αρχεία θα αναπτυχθούν γρήγορα. Να είστε έτοιμοι να πατήσετε Ctrl+C μέσα σε λίγα δευτερόλεπτα.

yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

Το αρχείο που δημιουργήθηκε εδώ χρειάστηκε περίπου πέντε δευτερόλεπτα στη δοκιμαστική μηχανή που χρησιμοποιήθηκε για την έρευνα αυτού του άρθρου. Η ls αναφέρει ότι είναι 557 Mb σε μέγεθος και η wc μας λέει ότι υπάρχουν 12,4 εκατομμύρια γραμμές σε αυτό.

Μπορούμε να περιορίσουμε το μέγεθος του αρχείου συμπεριλαμβάνοντας το head στη συμβολοσειρά εντολών μας. Του λέμε πόσες γραμμές να συμπεριλάβει στο αρχείο. Το -50 σημαίνει ότι η κεφαλή θα αφήσει μόλις 50 γραμμές να περάσουν στο αρχείο test.txt.

yes long line of meaningless text for file padding | head -50 > test.txt

Μόλις υπάρχουν 50 γραμμές στο αρχείο test.txt, η διαδικασία θα σταματήσει. Δεν χρειάζεται να χρησιμοποιήσετε Ctrl+C. Σταματάει με τη θέλησή του.

Το wc αναφέρει ότι υπάρχουν ακριβώς 50 γραμμές στο αρχείο, 400 λέξεις και έχει μέγεθος 2350 byte.

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