Hvordan bruke ja-kommandoen på Linux

Ja-kommandoen virker for enkel til å være til praktisk bruk, men i denne opplæringen viser vi deg applikasjonen og hvordan du kan dra nytte av dens innestengte positivitet i Linux og macOS.

Ja-kommandoen

yes-kommandoen er en av de enkleste kommandoene i Linux og andre Unix-lignende operativsystemer som macOS. Og med enkelt, mener vi enkel i bruken og den første implementeringen. Kildekoden for den originale versjonen – utgitt i System 7 Unix og forfattet av Ken Thompson– utgjør bare seks linjer med kode.

Men ikke avskriv det for å være en enkel liten kommando. Den kan brukes på noen interessante og nyttige måter.

Hva gjør ja?

Brukt uten noen kommandolinjeparametere, oppfører yes-kommandoen som om du skriver «y» og trykker Enter, om og om igjen (og om og om igjen) igjen. Svært raskt. Og det vil fortsette å gjøre det til du trykker Ctrl+C for å avbryte det.

yes

Faktisk kan ja brukes til å gjentatte ganger generere en melding du velger. Bare skriv ja, et mellomrom, strengen du ønsker å bruke, og trykk deretter Enter. Dette brukes ofte for å få ja til å generere en utdatastrøm av «ja» eller «nei»-strenger.

yes yes

yes anything you like

Men hvilken nytte er det?

Utdataene fra yes kan overføres til andre programmer eller skript.

Høres dette kjent ut? Du starter en lang prosess og går bort, og lar den kjøre. Når du kommer tilbake til datamaskinen, er ikke prosessen fullført i det hele tatt. I ditt fravær har den stilt deg et spørsmål og sitter og venter på et «ja» eller «nei» svar.

Hvis du på forhånd vet at alle svarene dine kommer til å være positive («ja» eller «y») eller negative («nei» eller «n»), kan du bruke ja til å gi deg disse svarene. Din lange prosess vil deretter løpe gjennom til fullføring uten tilsyn, og ja gir svar på eventuelle spørsmål prosessen stiller.

  The Fall of Max Payne på Linux

Bruker ja med skript

Se på følgende Bash shell-skript. (Vi må forestille oss at dette er en del av et mye større skript som vil ta lang tid å kjøre.)

#!/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

Dette skriptet stiller et spørsmål og venter på svar. Den logiske flyten i skriptet bestemmes av innspill fra brukeren.

Et «ja» eller «y» indikerer et positivt svar.
Alle andre innspill anses som et negativt svar.
Å trykke på Enter uten inndatatekst gjør ingenting.

For å teste dette, kopier skriptet til en fil og lagre det som long_script.sh. Bruk chmod for å gjøre den kjørbar.

chmod +x long_script.sh

Kjør skriptet med følgende kommando. Prøv å gi «ja», «y» og alt annet som input, inkludert å trykke på Enter uten inndatatekst.

./long_script.sh

For å få ja til å svare på skriptets spørsmål, kan du sende utdataene fra ja til skriptet.

yes | ./long_script.sh

Noen skript er mer rigide i kravene og aksepterer bare hele ordet «ja» som et positivt svar. Du kan angi «ja» som en parameter til ja, som følger:

yes yes | ./long_script.sh

Ikke si ja uten å tenke gjennom det

Du må være sikker på at innspillet du skal legge inn i manuset eller programmet definitivt kommer til å gi deg det resultatet du forventer. For å kunne ta den avgjørelsen må du vite spørsmålene og hva svarene dine bør være.

  Hvordan installere Oracle VirtualBox på Linux

Logikken i skriptet, kommandoen eller programmet samsvarer kanskje ikke med forventningene dine. I eksempelskriptet vårt kan spørsmålet ha vært «Ønsker du å slutte? [y,n].» Hvis det hadde vært tilfelle, ville et negativt svar ha tillatt manuset å fortsette.

Du må være kjent med skriptet, kommandoen eller programmet før du velvillig setter ja i det.

Bruker ja med kommandoer

I sin spede begynnelse ville ja bli brukt med andre Linux-kommandoer. Siden den gang har de fleste av de andre Linux-kommandoene sin egen måte å kjøre uten menneskelig interaksjon. ja er ikke lenger nødvendig for å oppnå det.

La oss ta Ubuntu-pakkebehandleren apt-get som et eksempel. For å installere en applikasjon uten å måtte trykke «y» halvveis gjennom installasjonen, ville ja blitt brukt som følger:

yes | sudo apt-get install fortune-mod

Det samme resultatet kan oppnås ved å bruke alternativet -y (anta ja) i apt-get:

sudo apt-get -y install fortune-mod

Du vil se at apt-get ikke en gang spurte sin vanlige «Vil du fortsette? [Y/n]» spørsmål. Den antok bare at svaret ville være «ja».

På andre Linux-distribusjoner er situasjonen den samme. På Fedora ville du ha brukt denne typen pakkebehandlingskommandoer på en gang:

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 gjelder for cp, fsck og rm. Disse kommandoene har hver sine egne -f (kraft) eller -y (anta ja) alternativer.

Så ser det ut til at yes har blitt henvist til kun å jobbe med skript? Ikke helt. Det er noen flere triks i den gamle hunden ennå.

Noen flere ja-triks

Du kan bruke ja med en sekvens av sifre generert av seq for å kontrollere en løkke med gjentatte handlinger.

Denne one-liner ekko de genererte sifrene til terminalvinduet og kaller deretter hvilemodus i ett sekund.

  Hvordan se ledig diskplass og diskbruk fra Linux-terminalen

I stedet for bare å gjengi sifrene til terminalvinduet, kan du kalle en annen kommando eller et skript. Den kommandoen eller skriptet trenger ikke engang å bruke sifrene, og de er bare der for å kickstarte 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 å teste med. Kanskje du vil øve på å bruke zip-kommandoen, eller du vil ha en stor fil å teste FTP-opplastinger med.

Du kan raskt generere store filer med yes. Alt du trenger å gjøre er å gi den en lang tekststreng å jobbe med og omdirigere utdataene til en fil. Ikke gjør feil; disse filene vil vokse raskt. Vær klar til å trykke Ctrl+C innen noen få sekunder.

yes long line of meaningless text for file padding > test.txt
ls -lh test.txt
wc test.txt

Filen som ble generert her tok omtrent fem sekunder på testmaskinen som ble brukt til å undersøke denne artikkelen. ls rapporterer at den er 557 Mb stor, og vi forteller oss at det er 12,4 millioner linjer i den.

Vi kan begrense størrelsen på filen ved å inkludere head i kommandostrengen vår. Vi forteller det hvor mange linjer som skal inkluderes i filen. -50 betyr at hodet vil slippe bare 50 linjer gjennom til test.txt-filen.

yes long line of meaningless text for file padding | head -50 > test.txt

Så snart det er 50 linjer i test.txt-filen, vil prosessen stoppe. Du trenger ikke å bruke Ctrl+C. Den stopper grasiøst av egen vilje.

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

Selv om det fortsatt er nyttig for å mate svar inn i langvarige skript (og noen få andre triks), kommer ikke ja-kommandoen til å være en del av det daglige verktøysettet med kommandoer. Men når du trenger det, vil du oppdage at det er enkelheten i seg selv – og alt i seks linjer med gylden kode.