Comanda da pare prea simplă pentru a avea vreo utilitate practică, dar în acest tutorial, vă vom arăta aplicația sa și cum să beneficiați de pozitivitatea sa acumulată în Linux și macOS.
Cuprins
Comanda da
Comanda da este una dintre cele mai simple comenzi din Linux și din alte sisteme de operare asemănătoare Unix, cum ar fi macOS. Și prin simplu, înțelegem simplu în utilizarea și implementarea sa inițială. Codul sursă pentru versiunea originală – lansat în System 7 Unix și creat de Ken Thompson— echivalează cu un simplu șase linii de cod.
Dar nu o anulați pentru că este o simplă comandă. Poate fi folosit în câteva moduri interesante și utile.
Ce face da?
Folosită fără parametri de linie de comandă, comanda yes se comportă ca și cum ai tasta „y” și ai apăsa Enter, iar și iar (și iar și iar) din nou. Foarte repede. Și va continua să facă acest lucru până când apăsați Ctrl+C pentru a-l întrerupe.
yes
De fapt, da poate fi folosit pentru a genera în mod repetat orice mesaj pe care îl alegeți. Pur și simplu introduceți da, un spațiu, șirul pe care doriți să îl utilizați, apoi apăsați Enter. Acesta este adesea folosit pentru a determina da pentru a genera un flux de ieșire de șiruri „da” sau „nu”.
yes yes
yes anything you like
Dar ce folos are asta?
Ieșirea de la yes poate fi transmisă în alte programe sau scripturi.
Sună cunoscut? Începeți un proces lung care rulează și vă îndepărtați, lăsându-l să ruleze. Când reveniți la computer, procesul nu s-a finalizat deloc. În absența ta, ți-a pus o întrebare și așteaptă un răspuns „da” sau „nu”.
Dacă știți dinainte că toate răspunsurile dumneavoastră vor fi pozitive („da” sau „y”) sau negative („nu” sau „n”), puteți folosi da pentru a vă oferi acele răspunsuri. Procesul dumneavoastră lung se va desfășura apoi până la finalizare nesupravegheat, cu da, oferind răspunsuri la orice întrebări pe care le pune procesul.
Folosind da cu scripturi
Uitați-vă la următorul script shell Bash. (Trebuie să ne imaginăm că aceasta este o parte a unui script mult mai mare, care va dura mult timp.)
#!/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
Acest script pune o întrebare și așteaptă un răspuns. Fluxul logic în cadrul scriptului este decis de intrarea din partea utilizatorului.
Un „da” sau „y” indică un răspuns pozitiv.
Orice altă intrare este considerată un răspuns negativ.
Apăsarea Enter fără text introdus nu face nimic.
Pentru a testa acest lucru, copiați scriptul într-un fișier și salvați-l ca long_script.sh. Utilizați chmod pentru a-l face executabil.
chmod +x long_script.sh
Rulați scriptul cu următoarea comandă. Încercați să furnizați „da”, „y” și orice altceva ca introducere, inclusiv apăsând Enter fără text introdus.
./long_script.sh
Pentru a obține răspunsul nostru la întrebarea scriptului, trimiteți rezultatul de la da la script.
yes | ./long_script.sh
Unele scripturi sunt mai rigide în cerințele lor și acceptă doar cuvântul complet „da” ca răspuns pozitiv. Puteți furniza „da” ca parametru pentru da, după cum urmează:
yes yes | ./long_script.sh
Nu spune da fără să te gândești bine
Trebuie să fiți sigur că intrarea pe care o veți introduce în script sau program vă va oferi cu siguranță rezultatul pe care îl așteptați. Pentru a putea lua această decizie, trebuie să cunoașteți întrebările și care ar trebui să fie răspunsurile dvs.
Este posibil ca logica din script, comandă sau program să nu corespundă așteptărilor dvs. În exemplul nostru de scenariu, întrebarea ar fi putut fi „Doriți să vă opriți? [y,n].” Dacă acesta ar fi fost cazul, un răspuns negativ ar fi permis scenariului să continue.
Trebuie să fiți familiarizați cu scriptul, comanda sau programul înainte de a le introduce cu plăcere.
Folosind da cu comenzi
La începuturile sale, da ar fi folosit cu alte comenzi Linux. De atunci, majoritatea celorlalte comenzi Linux au propriul lor mod de a rula fără interacțiune umană. da nu mai este necesar pentru a realiza asta.
Să luăm ca exemplu managerul de pachete Ubuntu apt-get. Pentru a instala o aplicație fără a fi nevoie să apăsați „y” la jumătatea instalării, da ar fi fost folosit după cum urmează:
yes | sudo apt-get install fortune-mod
Același rezultat poate fi obținut folosind opțiunea -y (presupunem da) în apt-get:
sudo apt-get -y install fortune-mod
Veți vedea că apt-get nici măcar nu a întrebat de obicei „Vrei să continui? [Y/n]” întrebare. Pur și simplu a presupus că răspunsul ar fi „da”.
Pe alte distribuții Linux, situația este aceeași. Pe Fedora ați fi folosit acest tip de comandă de manager de pachete la un moment dat:
yes | yum install fortune-mod
Managerul de pachete dnf a înlocuit yum și dnf are propria sa opțiune -y (să presupunem că da).
dnf -y install fortune-mod
Același lucru este valabil și pentru cp, fsck și rm. Aceste comenzi au fiecare propriile opțiuni -f (forță) sau -y (presupunem că da).
Deci, se pare că da a fost retrogradat doar să lucreze cu scripturi? Nu chiar. Mai sunt încă câteva trucuri la bătrânul câine.
Câteva trucuri în continuare da
Puteți folosi da cu o secvență de cifre generată de seq pentru a controla o buclă de acțiuni repetate.
Această linie cu o singură linie trimite cifrele generate în fereastra terminalului și apoi apelează la starea de repaus pentru o secundă.
În loc să trimiteți pur și simplu ecou cifrele în fereastra terminalului, puteți apela o altă comandă sau script. Acea comandă sau scriptul nici măcar nu are nevoie să folosească cifrele, iar acestea sunt acolo doar pentru a porni fiecare ciclu al buclei.
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done
Uneori este util să aveți un fișier mare cu care să testați. Poate doriți să exersați folosind comanda zip sau doriți să aveți un fișier considerabil cu care să testați încărcările FTP.
Puteți genera rapid fișiere mari cu da. Tot ce trebuie să faceți este să îi oferiți un șir lung de text cu care să lucrați și să redirecționați rezultatul într-un fișier. Nu faceți greșeli; acele fișiere vor crește rapid. Fiți gata să apăsați Ctrl+C în câteva secunde.
yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt
Fișierul generat aici a durat aproximativ cinci secunde pe mașina de testare folosită pentru cercetarea acestui articol. Raportează că are o dimensiune de 557 Mb, iar wc ne spune că există 12,4 milioane de linii în el.
Putem limita dimensiunea fișierului incluzând head în șirul nostru de comandă. Îi spunem câte rânduri să includă în fișier. -50 înseamnă că capul va lăsa doar 50 de linii să ajungă la fișierul test.txt.
yes long line of meaningless text for file padding | head -50 > test.txt
De îndată ce există 50 de linii în fișierul test.txt, procesul se va opri. Nu trebuie să folosiți Ctrl+C. Se oprește grațios din proprie voință.
wc raportează că există exact 50 de linii în fișier, 400 de cuvinte și are o dimensiune de 2350 de octeți.
Chiar dacă este încă utilă pentru a introduce răspunsuri în scripturi de lungă durată (și alte câteva trucuri), comanda yes nu va face parte din setul tău de instrumente zilnic de comenzi. Dar când ai nevoie de el, vei descoperi că este simplitatea în sine – și totul în șase linii de cod de aur.