Lær å mestre `yes`-kommandoen: Enkle triks for Linux & macOS!

Selv om «ja»-kommandoen kan virke for enkel til å være praktisk, vil denne veiledningen vise deg hvordan du kan utnytte dens iboende positivitet i Linux og macOS.

Introduksjon til «ja»-kommandoen

Kommandoen «yes» er en av de mest grunnleggende kommandoene tilgjengelig i Linux, samt andre Unix-lignende systemer som macOS. Med «grunnleggende» mener vi enkel i bruk og i den opprinnelige utformingen. Kildekoden til den opprinnelige versjonen, introdusert i System 7 Unix av Ken Thompson, besto av beskjedne seks linjer med kode.

Likevel, ikke undervurder den bare fordi den er enkel. Den kan faktisk benyttes på flere interessante og nyttige måter.

Hva gjør «ja»-kommandoen?

Når «yes» brukes uten noen tilleggsparametere, oppfører den seg som om du skriver bokstaven «y» og trykker på Enter, om og om igjen med utrolig hastighet. Denne prosessen fortsetter helt til du stopper den med Ctrl+C.

yes

Faktisk kan «yes» også brukes til å kontinuerlig generere en spesifikk melding. Bare skriv «yes», etterfulgt av et mellomrom og den ønskede strengen, og trykk Enter. Dette brukes ofte for å skape en strøm av enten «ja»- eller «nei»-strenger.

yes yes

yes hva som helst du ønsker

Hva er den praktiske nytten?

Resultatet fra «yes»-kommandoen kan videresendes til andre programmer eller skript.

Kjenner du deg igjen i dette? Du starter en lang prosess og forlater datamaskinen, og tenker at den skal fortsette. Når du kommer tilbake, har prosessen stoppet fordi den spør etter bekreftelse med et «ja» eller «nei»-svar.

Hvis du på forhånd vet at alle svarene dine vil være bekreftende («ja» eller «y») eller avkreftende («nei» eller «n»), kan du bruke «yes» til å gi disse svarene automatisk. Dermed kan den lange prosessen fortsette uten tilsyn og besvare eventuelle spørsmål som dukker opp.

Bruk av «ja» i skript

Se på dette enkle Bash shell-skriptet (forestill deg at dette er en del av et større skript som tar lang tid å fullføre):

#!/bin/bash

# ...
# midt i et langt skript
# hent et svar fra brukeren
# ...

echo "Er du klar for å fortsette? [y,n]"
read input

# Fikk vi en verdi fra brukeren?
if [ "$input" == "" ]; then

   echo "Brukeren ga ingen input"

# var det et y eller et ja?
elif [[ "$input" == "y" ]] || [[ "$input" == "yes" ]]; then

   echo "Positivt svar: $input"

# Alt annet behandles som negativt svar
else

   echo "Negativt svar: $input"

fi

Dette skriptet stiller et spørsmål og venter på et svar fra brukeren. Skriptets logikk avhenger av brukerens input.

Enten et «ja» eller «y» indikerer et positivt svar. Alle andre input behandles som et negativt svar. Hvis man trykker Enter uten å skrive noe, skjer ingenting.

For å teste skriptet, kopier koden til en fil, lagre den som `long_script.sh`, og bruk `chmod` for å gjøre den kjørbar.

chmod +x long_script.sh

Kjør skriptet og prøv forskjellige input, inkludert «ja», «y» og andre alternativer, samt å trykke Enter uten input.

./long_script.sh

For å la «yes» svare på skriptets spørsmål, kan du videresende utdataene fra «yes» til skriptet.

yes | ./long_script.sh

Noen skript er strengere og krever at hele ordet «ja» skal brukes som bekreftende svar. Du kan angi «ja» som en parameter til «yes»:

yes yes | ./long_script.sh

Vær forsiktig med «ja»

Du må være sikker på at input som sendes inn i skriptet eller programmet gir det resultatet du forventer. Du må kjenne til spørsmålene og hvordan du bør svare.

Logikken i et skript, kommando eller program kan være annerledes enn du forventer. I eksempelet vårt kunne spørsmålet ha vært «Ønsker du å avslutte? [y,n]». I så fall ville et negativt svar tillatt skriptet å fortsette.

Du bør gjøre deg kjent med skriptet eller programmet før du bruker «yes» for å sende input.

Bruk av «ja» med kommandoer

I tidlige versjoner av Linux ble «yes» ofte brukt sammen med andre kommandoer. Imidlertid har de fleste Linux-kommandoer nå egne metoder for å kjøre uten brukerinteraksjon, noe som gjør «yes» overflødig i mange tilfeller.

For eksempel, for å installere en applikasjon med Ubuntu-pakkebehandleren `apt-get` uten å måtte bekrefte med «y» i midten av installasjonen, brukte man «yes» på denne måten:

yes | sudo apt-get install fortune-mod

Men det samme resultatet kan oppnås med `-y`-alternativet i `apt-get`:

sudo apt-get -y install fortune-mod

Som du ser, spør ikke `apt-get` om den vanlige bekreftelsen «Vil du fortsette? [Y/n]». Den antar at svaret er «ja».

Det samme gjelder i andre Linux-distribusjoner. På Fedora brukte man kommandoer med pakkefunksjonen `yum` på følgende måte:

yes | yum install fortune-mod

`dnf`-pakkebehandleren har erstattet `yum`, og `dnf` har sitt eget `-y` (anta ja) alternativ:

dnf -y install fortune-mod

Det samme prinsippet gjelder for `cp`, `fsck` og `rm`. Disse kommandoene har egne `-f` (force) eller `-y` (anta ja) alternativer.

Betyr dette at «yes» kun brukes i skript? Ikke helt. Det finnes fortsatt noen få triks igjen i den gamle hunden.

Flere triks med «ja»

Du kan bruke «yes» sammen med en tallsekvens generert av `seq` for å kontrollere gjentatte handlinger.

Denne en-linjers kommandoen gjengir tallene til terminalvinduet og lar deretter systemet hvile i ett sekund.

I stedet for å vise tallene på skjermen, kan du kalle en annen kommando eller et skript. Kommandoen eller skriptet trenger ikke en gang å bruke tallene. De brukes kun for å starte hver syklus av loopen.

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

Noen ganger er det nyttig å ha en stor fil for testformål. Kanskje du vil øve på å bruke `zip`-kommandoen, eller du trenger en stor fil for FTP-opplastinger.

Du kan raskt generere store filer med «yes». Alt du trenger å gjøre er å gi den en lang tekststreng og omdirigere utdataene til en fil. Vær forsiktig, filene kan vokse svært raskt. Vær klar til å trykke Ctrl+C etter noen sekunder.

yes lang linje med meningsløs tekst for å fylle filen > test.txt
ls -lh test.txt
wc test.txt

Filen som ble generert her, tok omtrent fem sekunder på testmaskinen som ble brukt i denne artikkelen. `ls` rapporterer at den er 557 Mb stor, og `wc` viser at den inneholder 12,4 millioner linjer.

Vi kan begrense størrelsen på filen ved å inkludere `head` i kommandostrengen. Vi forteller `head` hvor mange linjer som skal inkluderes i filen. `-50` betyr at bare de første 50 linjene vil bli inkludert i `test.txt`-filen.

yes lang linje med meningsløs tekst for å fylle filen | head -50 > test.txt

Når det er 50 linjer i `test.txt`-filen, vil prosessen stoppe automatisk, uten at du trenger å bruke Ctrl+C.

`wc` rapporterer at filen inneholder nøyaktig 50 linjer, 400 ord og at den er 2350 byte stor.

Selv om kommandoen fortsatt er nyttig for å mate svar inn i tidkrevende skript (og noen få andre spesialtilfeller), er ikke «yes» en del av det daglige verktøysettet for mange brukere. Men når du trenger den, vil du finne at den er enkel i sin natur, og alt dette i bare seks linjer med kode.