
Het ja-commando lijkt te simpel om praktisch van nut te zijn, maar in deze tutorial laten we je de toepassing zien en hoe je kunt profiteren van zijn opgekropte positiviteit in Linux en macOS.
Het ja-commando
De yes command is een van de eenvoudigste commando’s in Linux en andere Unix-achtige besturingssystemen zoals macOS. En met eenvoudig bedoelen we eenvoudig in het gebruik en de eerste implementatie ervan. De broncode van de originele versie – uitgebracht in System 7 Unix en geschreven door Ken Thompson – bedraagt ​​slechts zes regels code.
Maar schrijf het niet af als een eenvoudig klein commando. Het kan op een aantal interessante en nuttige manieren worden gebruikt.
Wat doet ja?
Gebruikt zonder enige opdrachtregelparameters, de yes commando gedraagt ​​zich alsof u “y” typt en op Enter drukt, steeds opnieuw (en opnieuw en opnieuw). Heel snel. En het zal dit blijven doen totdat u op Ctrl + C drukt om het te onderbreken.
yes

In feite, yes kan worden gebruikt om herhaaldelijk een bericht te genereren dat u kiest. Typ gewoon yes, een spatie, de tekenreeks die u wilt gebruiken en druk vervolgens op Enter. Dit wordt vaak gebruikt om te veroorzaken yes om een ​​outputstroom van “ja” of “nee” strings te genereren.
yes yes

yes anything you like

Maar wat voor nut heeft dat?
De output van yes kunnen worden doorgesluisd naar andere programma’s of scripts.
Klinkt dit bekend? Je begint een lang proces dat loopt en stapt weg en laat het draaien. Wanneer u terugkeert naar uw computer, is het proces helemaal niet voltooid. Tijdens uw afwezigheid heeft het u een vraag gesteld en wacht het op een “ja” of “nee” antwoord.
Als u van tevoren weet dat al uw antwoorden positief (“ja” of “y”) of negatief (“nee” of “n”) zullen zijn, kunt u yes om u die antwoorden te geven. Uw lange proces zal dan zonder toezicht doorlopen tot voltooiing yes de antwoorden geven op alle vragen die het proces stelt.
Ja gebruiken met scripts
Bekijk het volgende Bash-shellscript. (We moeten ons voorstellen dat dit een onderdeel is van een veel groter script dat veel tijd in beslag zal nemen.)
#!/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
Dit script stelt een vraag en wacht op een reactie. De logische stroom binnen het script wordt bepaald door de input van de gebruiker.
- Een “ja” of “y” duidt op een positieve reactie.
- Elke andere invoer wordt als een negatief antwoord beschouwd.
- Op Enter drukken zonder invoertekst doet niets.
Om dit te testen, kopieert u het script naar een bestand en slaat u het op als long_script.sh. Gebruik chmod om het uitvoerbaar te maken.
chmod +x long_script.sh
Voer het script uit met de volgende opdracht. Probeer “ja”, “y” en iets anders als invoer op te geven, inclusief het drukken op Enter zonder invoertekst.
./long_script.sh

Te krijgen yes om ons antwoord op de vraag van het script te geven, pijpt u de uitvoer van yes naar het script.
yes | ./long_script.sh

Sommige scripts zijn strenger in hun eisen en accepteren alleen het volledige woord ‘ja’ als een positieve reactie. U kunt “ja” opgeven als parameter voor yes, als volgt:
yes yes | ./long_script.sh

Zeg geen ja zonder erover na te denken
U moet er zeker van zijn dat de input die u in het script of programma gaat invoeren, u zeker het verwachte resultaat zal opleveren. Om die beslissing te kunnen nemen, moet u de vragen kennen en weten wat uw antwoorden zouden moeten zijn.
De logica in het script, de opdracht of het programma komt mogelijk niet overeen met uw verwachtingen. In ons voorbeeldscript zou de vraag kunnen zijn: “Wilt u stoppen? [y,n]. ” Als dat het geval was geweest, zou een negatief antwoord het script hebben kunnen voortzetten.
U moet bekend zijn met het script, de opdracht of het programma voordat u vrolijk pijpt yes erin.
Ja gebruiken met opdrachten
In zijn jeugd, yes zou worden gebruikt met andere Linux-opdrachten. Sindsdien hebben de meeste van die andere Linux-commando’s hun eigen manier van werken zonder menselijke tussenkomst. yes is niet langer nodig om dat te bereiken.
Laten we de Ubuntu-pakketbeheerder nemen apt-get als voorbeeld. Om een ​​applicatie te installeren zonder halverwege de installatie op “y” te hoeven drukken, yes zou als volgt zijn gebruikt:
yes | sudo apt-get install fortune-mod

Hetzelfde resultaat kan worden bereikt met de -y (neem aan van ja) optie in apt-get:
sudo apt-get -y install fortune-mod

Dat zul je zien apt-get vroeg niet eens zijn gebruikelijke “Wil je doorgaan? [Y/n]” vraag. Het ging er gewoon van uit dat het antwoord ‘ja’ zou zijn.
Op andere Linux-distributies is de situatie hetzelfde. Op Fedora zou je dit type pakketbeheercommando ooit hebben gebruikt:
yes | yum install fortune-mod
De dnf pakketbeheerder is vervangen yum en dnf heeft zijn eigen -y (neem aan van ja) optie.
dnf -y install fortune-mod
Hetzelfde geldt voor cp, fsck, en rm. Deze commando’s hebben elk hun eigen -f (kracht) of -y (neem aan van ja) opties.
Dus het lijkt erop dat yes is gedegradeerd om alleen met scripts te werken? Niet helemaal. Er zijn nog een paar trucjes in de oude hond.
Enkele andere ja-trucs
Je kunt gebruiken yes met een reeks cijfers gegenereerd door seq om een ​​lus van herhaalde acties te controleren.
Deze one-liner echoot de gegenereerde cijfers naar het terminalvenster en roept vervolgens op sleep voor een seconde.
In plaats van simpelweg de cijfers naar het terminalvenster te echoën, zou je een ander commando of script kunnen aanroepen. Dat commando of script hoeft niet eens de cijfers te gebruiken, en ze zijn er alleen om elke cyclus van de lus op gang te brengen.
yes "$(seq 1 20)" | while read digit; do echo digit; sleep 1; done

Soms is het handig om een ​​groot bestand te hebben om mee te testen. Misschien wil je oefenen met het zip-commando, of wil je een groot bestand hebben om FTP-uploads mee te testen.
Met yes. Het enige dat u hoeft te doen, is het een lange reeks tekst geven om mee te werken en de uitvoer omleiden naar een bestand. Vergis je niet; die bestanden zullen snel groeien. Wees klaar om binnen een paar seconden op Ctrl + C te drukken.
yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

Het hier gegenereerde bestand duurde ongeveer vijf seconden op de testmachine die werd gebruikt om dit artikel te onderzoeken. ls meldt dat het 557 Mb groot is, en wc vertel ons dat er 12,4 miljoen regels in staan.
We kunnen de grootte van het bestand beperken door head in onze opdrachtreeks. We vertellen hoeveel regels we in het bestand moeten opnemen. De -50 middelen head laat slechts 50 regels door naar de test.txt het dossier.
yes long line of meaningless text for file padding | head -50 > test.txt

Zodra er 50 regels in het test.txt bestand, zal het proces stoppen. U hoeft Ctrl + C niet te gebruiken. Het komt op een sierlijke manier tot stilstand.
wc meldt dat er precies 50 regels in het bestand staan, 400 woorden en dat het 2350 bytes groot is.
Ook al is het nog steeds nuttig om reacties in langlopende scripts in te voeren (en een paar andere trucs), de yes commando zal geen deel uitmaken van uw dagelijkse toolkit met commando’s. Maar als je het nodig hebt, zul je merken dat het de eenvoud zelf is – en dat alles in zes regels gouden code.