Cum să utilizați comanda yes pe Linux

Această comandă pare extrem de simplă, sugerând o utilitate practică limitată, dar în acest ghid vom explora aplicațiile sale și modul în care poți beneficia de funcționalitatea sa acumulată în sistemele Linux și macOS.

Comanda `da`

Comanda `da` se distinge prin simplitatea sa, fiind una dintre cele mai accesibile comenzi în universul Linux și în alte sisteme de operare bazate pe Unix, precum macOS. Prin simplitate ne referim la ușurința utilizării și implementării sale inițiale. Codul sursă al versiunii originale, lansată în System 7 Unix și creată de Ken Thompson, se reduce la doar șase linii de cod.

Însă, simplitatea nu ar trebui să te inducă în eroare. Această comandă poate fi valorificată într-o serie de moduri interesante și utile.

Funcționalitatea de bază a comenzii `da`

În absența parametrilor de linie de comandă, comanda `yes` se comportă ca și cum ai tasta continuu litera „y” și ai apăsa tasta Enter, generând o succesiune rapidă și neîntreruptă până la intervenția utilizatorului prin apăsarea combinației de taste Ctrl+C.

yes

Mai mult decât atât, comanda `da` are capacitatea de a repeta orice mesaj specificat de utilizator. Pentru a realiza acest lucru, trebuie doar să introduci `da`, un spațiu, urmat de șirul de caractere dorit și apoi să apeși Enter. Acest mod de utilizare este adesea folosit pentru a crea fluxuri de ieșire formate din șiruri „da” sau „nu”.

yes da

yes orice text doresti

Utilitatea practică a comenzii `da`

Rezultatul produs de comanda `da` poate fi redirecționat către alte programe sau scripturi.

Probabil ai întâmpinat situația în care ai lansat un proces îndelungat, care a rămas blocat în așteptarea unui răspuns, cum ar fi un simplu „da” sau „nu”.

În situațiile în care știi că toate răspunsurile tale vor fi fie pozitive („da” sau „y”), fie negative („nu” sau „n”), comanda `da` îți poate oferi aceste răspunsuri automat. În acest fel, procesul tău va continua fără supraveghere, `da` furnizând răspunsurile necesare.

Utilizarea comenzii `da` în scripturi

Analizează următorul script shell Bash, care simulează o parte dintr-un script mai extins:

#!/bin/bash

# ...
# în mijlocul unui script lung
# obține un răspuns de la utilizator
# ...

echo "Ești de acord să continui? [y,n]"
read input

# am primit o valoare de intrare?
if [ "$input" == "" ]; then

   echo "Nu a fost introdus nimic de către utilizator"

# a fost un y sau un da?
elif [[ "$input" == "y" ]] || [[ "$input" == "da" ]]; then

   echo "Răspuns pozitiv: $input"

# tratează orice altceva ca un răspuns negativ
else

   echo "Răspuns negativ: $input"

fi

Acest script prezintă o întrebare utilizatorului și așteaptă un răspuns, fluxul logic fiind condiționat de valoarea introdusă.

Un răspuns „da” sau „y” indică o aprobare, în timp ce orice altă introducere este considerată un răspuns negativ. Apăsarea tastei Enter fără a introduce text nu produce niciun efect.

Pentru a testa acest script, copiază-l într-un fișier și salvează-l ca `long_script.sh`. Apoi, acordă-i drepturi de execuție cu comanda `chmod +x long_script.sh`.

chmod +x long_script.sh

Rulează scriptul folosind comanda `./long_script.sh`. Experimentează introducând „da”, „y” și orice altă valoare, inclusiv apăsând Enter fără text.

./long_script.sh

Pentru a furniza un răspuns scriptului, redirecționează rezultatul comenzii `da` către script:

yes | ./long_script.sh

Unele scripturi pot fi mai stricte și acceptă doar cuvântul complet „da” ca răspuns pozitiv. În acest caz, poți utiliza `da` cu parametrul „da”:

yes da | ./long_script.sh

Importanța unei utilizări atente a comenzii `da`

Este crucial să te asiguri că introducerea automată prin comanda `da` va produce rezultatul dorit. Înainte de a o utiliza, este necesar să înțelegi scopul scriptului sau programului și să cunoști întrebările la care va trebui să se răspundă.

Logica internă a scriptului sau a programului ar putea să nu corespundă așteptărilor tale. De exemplu, întrebarea ar fi putut fi formulată ca „Dorești să te oprești? [y,n]”, caz în care un răspuns negativ ar fi permis continuarea scriptului.

Înainte de a utiliza `da`, asigură-te că înțelegi pe deplin scriptul, comanda sau programul țintă.

Comanda `da` și alte comenzi

În trecut, comanda `da` era frecvent folosită împreună cu alte comenzi Linux. Cu toate acestea, majoritatea comenzilor moderne au mecanisme proprii pentru a funcționa fără interacțiune umană, reducând necesitatea utilizării lui `da` în aceste scenarii.

De exemplu, managerul de pachete `apt-get` din Ubuntu, putea fi folosit cu `da` astfel:

yes | sudo apt-get install fortune-mod

Acum, același rezultat se obține cu opțiunea `-y`:

sudo apt-get -y install fortune-mod

Observăm că `apt-get` nu mai solicită confirmarea utilizatorului, presupunând că răspunsul va fi „da”.

Situația este similară și în alte distribuții Linux. În Fedora, managerul de pachete `yum` era folosit astfel:

yes | yum install fortune-mod

Însă, `yum` a fost înlocuit de `dnf`, care are propria opțiune `-y`:

dnf -y install fortune-mod

Comenzi ca `cp`, `fsck` și `rm` au de asemenea opțiuni `-f` (force) sau `-y` (presupune da).

Așadar, `da` este redusă doar la interacțiunea cu scripturi? Nu chiar, mai are câteva trucuri ascunse.

Funcții avansate ale comenzii `da`

Poți utiliza `da` împreună cu o secvență de numere generată de `seq` pentru a controla o buclă de acțiuni repetate.

Această comandă trimite numerele generate în terminal și apoi așteaptă o secundă:

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

În loc să afișezi numerele, poți lansa o comandă sau un script, numerele servind doar drept declanșator pentru fiecare iteratie a buclei.

Poate fi util să generezi fișiere mari pentru testare. Comanda `da` poate crea rapid astfel de fișiere. Trebuie doar să specifici un șir lung de text și să redirecționezi ieșirea către un fișier. Aceste fișiere vor crește rapid, deci este recomandat să fii pregătit să apeși Ctrl+C.

yes sir lung de text fara sens pentru umplere fisier > test.txt
ls -lh test.txt
wc test.txt

Fișierul generat în testare a ajuns la 557 MB în câteva secunde, conținând 12,4 milioane de linii.

Putem limita dimensiunea fișierului cu ajutorul comenzii `head`. `-50` va limita fișierul la 50 de linii:

yes sir lung de text fara sens pentru umplere fisier | head -50 > test.txt

De îndată ce fișierul `test.txt` atinge 50 de linii, procesul se va opri automat. Nu mai este nevoie de Ctrl+C.

`wc` confirmă cele 50 de linii, 400 de cuvinte și 2350 de octeți.

Deși utilă pentru automatizarea răspunsurilor în scripturi și pentru alte câteva funcții, comanda `yes` nu va deveni o parte esențială a instrumentarului tău zilnic. Dar când ai nevoie de ea, vei aprecia simplitatea sa – totul în doar șase linii de cod.