Πώς να χρησιμοποιήσετε την εντολή ναι στο Linux
Βασικά Takeaways
-
Η εντολή “ναι” στο Linux και στο macOS μπορεί να δημιουργήσει επανειλημμένα οποιοδήποτε
μήνυμα
επιλέγετε, όπως συμβολο
σειρές
“ναι” ή “όχι”. - Η έξοδος από την εντολή “ναι” μπορεί να διοχετευτεί σε άλλα προγράμματα ή σενάρια για να παρέχει αυτόματες απαντήσεις.
- Η εντολή “ναι” μπορεί επίσης να χρησιμοποιηθεί για τη γρήγορη δημιουργία μεγάλων αρχείων ανακατευθύνοντας την έξοδο της σε ένα αρχείο.
Η εντολή ναι φαίνεται πολύ απλή για να είναι οποιαδήποτε πρακτική χρήση, αλλά σε αυτό το σεμινάριο, θα σας δείξουμε την εφαρμογή της και πώς να επωφεληθείτε από τη θετικότητά της σε Linux και macOS.
Τι κάνει η εντολή ναι;
Χρησιμοποιείται χωρίς παραμέτρους γραμμής εντολών, η εντολή yes συμπεριφέρεται σαν να πληκτρολογείτε “y” και να πατάτε Enter, ξανά και ξανά (και ξανά και ξανά). Πολύ γρήγορα. Και θα συνεχίσει να το κάνει μέχρι να πατήσετε Ctrl+C για να το διακόψετε.
yes
Στην πραγματικότητα, το ναι μπορεί να χρησιμοποιηθεί για τη δημιουργία επανειλημμένων μηνυμάτων που επιλέγετε. Απλώς πληκτρολογήστε ναι, ένα κενό διάστημα, τη συμβολοσειρά που θέλετε να χρησιμοποιήσετε και, στη συνέχεια, πατήστε Enter. Αυτό χρησιμοποιείται συχνά για να προκαλέσει το ναι να δημιουργήσει μια ροή εξόδου συμβολοσειρών “ναι” ή “όχι”.
yes yes
yes anything you like
Αλλά τι χρήση είναι αυτό;
Η έξοδος από το yes μπορεί να μεταφερθεί σε άλλα προγράμματα ή σενάρια.
Ακούγεται οικείο αυτό; Ξεκινάς μια μακρά διαδικασία τρέχοντας και απομακρύνεσαι, αφήνοντάς την να τρέξει. Όταν επιστρέψετε στον υπολογιστή σας, η διαδικασία δεν έχει ολοκληρωθεί καθόλου. Σε περίπτωση απουσίας σας, σας έχει κάνει μια ερώτηση και κάθεται περιμένοντας μια απάντηση “ναι” ή “όχι”.
Εάν γνωρίζετε εκ των προτέρων ότι όλες οι απαντήσεις σας θα είναι θετικές (“ναι” ή “y”) ή αρνητικές (“όχι” ή “n”), μπορείτε να χρησιμοποιήσετε το ναι για να παρέχετε αυτές τις απαντήσεις για εσάς. Στη συνέχεια, η μακροχρόνια διαδικασία θα ολοκληρωθεί χωρίς επίβλεψη, με το ναι να παρέχει τις απαντήσεις σε τυχόν ερωτήσεις που θέτει η διαδικασία.
Χρήση Yes With Scripts
Κοιτάξτε το ακόλουθο σενάριο κελύφους Bash. (Πρέπει να φανταστούμε ότι αυτό είναι ένα μέρος ενός πολύ μεγαλύτερου σεναρίου που θα πάρει αρκετό χρόνο για να τρέξει.)
#!/bin/bashecho "Are you happy to proceed? [y,n]"
read input
if [ "$input" == "" ]; then
echo "Nothing was entered by the user"
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then
echo "Positive response: $input"
else
echo "negative response: $input"
fi
Αυτό το σενάριο κάνει μια ερώτηση και περιμένει απάντηση. Η λογική ροή μέσα στο σενάριο αποφασίζεται από την είσοδο από τον χρήστη.
- Ένα “ναι” ή “y” υποδηλώνει μια θετική απάντηση.
- Οποιαδήποτε άλλη εισαγωγή θεωρείται αρνητική απάντηση.
- Το πάτημα Enter χωρίς εισαγωγή κειμένου δεν κάνει τίποτα.
Για να το δοκιμάσετε, αντιγράψτε το σενάριο σε ένα αρχείο και αποθηκεύστε το ως “long_script.sh”. Χρησιμοποιήστε το chmod για να το κάνετε εκτελέσιμο.
chmod +x long_script.sh
Εκτελέστε το σενάριο με την ακόλουθη εντολή. Δοκιμάστε να δώσετε “yes”, “y” και οτιδήποτε άλλο ως είσοδο, συμπεριλαμβανομένου του πλήκτρου Enter χωρίς κείμενο εισαγωγής.
./long_script.sh
Για να λάβετε ναι για να απαντήσουμε στην ερώτηση του σεναρίου, διοχετεύστε το αποτέλεσμα από το ναι στο σενάριο.
yes | ./long_script.sh
Ορισμένα σενάρια είναι πιο άκαμπτα στις απαιτήσεις τους και δέχονται μόνο την πλήρη λέξη «ναι» ως θετική απάντηση. Μπορείτε να δώσετε “ναι” ως παράμετρο στο yes, ως εξής:
yes yes | ./long_script.sh
Μην πείτε ναι χωρίς να το σκεφτείτε
Πρέπει να είστε βέβαιοι ότι η συμβολή που πρόκειται να τροφοδοτήσετε στο σενάριο ή το πρόγραμμα θα σας δώσει σίγουρα το αποτέλεσμα που περιμένετε. Για να μπορέσετε να πάρετε αυτή την απόφαση, πρέπει να γνωρίζετε τις ερωτήσεις και ποιες πρέπει να είναι οι απαντήσεις σας.
Η λογική στο σενάριο, την εντολή ή το πρόγραμμα ενδέχεται να μην ταιριάζει με τις προσδοκίες σας. Στο παράδειγμά μας σενάριο, η ερώτηση μπορεί να ήταν “Θέλετε να σταματήσετε; [y,n]Εάν συνέβαινε αυτό, μια αρνητική απάντηση θα επέτρεπε στο σενάριο να προχωρήσει.
Πρέπει να είστε εξοικειωμένοι με το σενάριο, την εντολή ή το πρόγραμμα προτού να περάσετε σιγά
yes
μέσα σε αυτό.
Χρήση ναι με εντολές
Στα σπάργανά του,
yes
θα χρησιμοποιηθεί με άλλες εντολές Linux. Από τότε, οι περισσότερες από αυτές τις άλλες εντολές Linux έχουν τον δικό τους τρόπο λειτουργίας χωρίς ανθρώπινη αλληλεπίδραση.
yes
δεν απαιτείται πλέον για να επιτευχθεί αυτό.
Ας πάρουμε τον διαχειριστή πακέτων 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
(δύναμη) ή
-y
(υποθέστε ναι) επιλογές.
Έτσι φαίνεται ότι
yes
έχει υποβιβαστεί στην εργασία μόνο με σενάρια; ΟΧΙ ακριβως. Υπάρχουν ακόμα μερικά κόλπα στο γέρο σκυλί.
Μερικά περαιτέρω ναι κόλπα
Μπορείς να χρησιμοποιήσεις
yes
με μια ακολουθία ψηφίων που δημιουργείται από
seq
για τον έλεγχο ενός βρόχου επαναλαμβανόμενων ενεργειών.
Αυτή η γραμμή μιας γραμμής επαναφέρει τα ψηφία που δημιουργούνται στο παράθυρο του τερματικού και στη συνέχεια καλεί
sleep
για ένα δευτερόλεπτο.
Αντί απλά να επαναλαμβάνετε τα ψηφία στο παράθυρο του τερματικού, μπορείτε να καλέσετε μια άλλη εντολή ή σενάριο. Αυτή η εντολή ή το σενάριο δεν χρειάζεται καν να χρησιμοποιεί τα ψηφία και είναι εκεί μόνο για να ξεκινήσει κάθε κύκλος του βρόχου.
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done
Μερικές φορές είναι χρήσιμο να έχετε ένα
μεγάλο
αρχείο για δοκιμή. Ίσως θέλετε να εξασκηθείτε χρησιμοποιώντας την εντολή zip ή θέλετε να έχετε ένα μεγάλο αρχείο για να δοκιμάσετε τις μεταφορτώσεις FTP.
Μπορείτε να δημιουργήσετε γρήγορα μεγάλα αρχεία με
yes
. Το μόνο που χρειάζεται να κάνετε είναι να του δώσετε μια μεγάλη συμβολοσειρά κειμένου για να εργαστείτε και να ανακατευθύνετε την έξοδο σε ένα αρχείο. Μην κάνετε κανένα λάθος. αυτά τα αρχεία θα αναπτυχθούν γρήγορα. Να είστε έτοιμοι να πατήσετε 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
που σημαίνει
head
θα αφήσει μόνο 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.
Η εντολή ναι είναι μια από τις απλούστερες εντολές στο Linux και σε άλλα λειτουργικά συστήματα παρόμοια με το Unix όπως το macOS. Ο πηγαίος κώδικας για την αρχική έκδοση—κυκλοφόρησε στο System 7 Unix και συντάχθηκε από
Ken Thompson-
ανέρχεται σε μια απλή
έξι γραμμές κώδικα
. Παρόλο που εξακολουθεί να είναι χρήσιμο για την τροφοδοσία απαντήσεων σε μακροχρόνια σενάρια (και μερικά άλλα κόλπα), το
yes
Η εντολή δεν πρόκειται να είναι μέρος της καθημερινής σας εργαλειοθήκης εντολών. Αλλά όταν το χρειάζεστε, θα διαπιστώσετε ότι είναι η ίδια η απλότητα—και όλα σε έξι γραμμές χρυσού κώδικα.
VIA:
HowToGeek.com
