Sådan bruger du ja-kommandoen på Linux

Ja-kommandoen virker for enkel til at være til nogen praktisk nytte, men i denne tutorial viser vi dig dens applikation, og hvordan du kan drage fordel af dens indestængte positivitet i Linux og macOS.

Ja-kommandoen

Ja-kommandoen er en af ​​de enkleste kommandoer i Linux og andre Unix-lignende operativsystemer som macOS. Og med simpelt mener vi enkel i dens brug og dens indledende implementering. Kildekoden til den originale version – udgivet i System 7 Unix og forfattet af Ken Thompson– svarer til blot seks linjer kode.

Men afskriv det ikke for at være en simpel lille kommando. Det kan bruges på nogle interessante og nyttige måder.

Hvad gør ja?

Brugt uden nogen kommandolinjeparametre, opfører yes-kommandoen, som om du skriver “y” og trykker Enter, igen og igen (og igen og igen) igen. Meget hurtigt. Og det fortsætter med at gøre det, indtil du trykker på Ctrl+C for at afbryde det.

yes

Faktisk kan ja bruges til gentagne gange at generere enhver besked, du vælger. Indtast blot ja, et mellemrum, den streng, du ønsker at bruge, og tryk derefter på Enter. Dette bruges ofte til at få ja til at generere en outputstrøm af “ja” eller “nej” strenge.

yes yes

yes anything you like

Men hvad nytter det?

Outputtet fra yes kan overføres til andre programmer eller scripts.

Lyder dette bekendt? Du starter en lang proces kørende og træder væk og lader den køre. Når du vender tilbage til din computer, er processen slet ikke fuldført. I dit fravær har den stillet dig et spørgsmål og har siddet og ventet på et “ja” eller “nej” svar.

Hvis du på forhånd ved, at alle dine svar vil være positive (“ja” eller “y”) eller negative (“nej” eller “n”), kan du bruge ja til at give dig disse svar. Din lange proces vil derefter løbe igennem til afslutning uden opsyn, og ja giver svar på eventuelle spørgsmål, processen stiller.

  Sådan konfigureres virtuelle maskiner på Linux med Gnome-bokse

Bruger ja med scripts

Se på følgende Bash shell-script. (Vi skal forestille os, at dette er en del af et meget større script, der vil tage lang tid at kø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 script stiller et spørgsmål og afventer et svar. Det logiske flow i scriptet bestemmes af input fra brugeren.

Et “ja” eller “y” indikerer et positivt svar.
Ethvert andet input betragtes som et negativt svar.
Et tryk på Enter uden inputtekst gør intet.

For at teste dette skal du kopiere scriptet til en fil og gemme det som long_script.sh. Brug chmod for at gøre det eksekverbart.

chmod +x long_script.sh

Kør scriptet med følgende kommando. Prøv at angive “ja”, “y” og alt andet som input, inklusive at trykke på Enter uden inputtekst.

./long_script.sh

For at få ja til at give vores svar på scriptets spørgsmål, skal du sende outputtet fra ja til scriptet.

yes | ./long_script.sh

Nogle scripts er mere stive i deres krav og accepterer kun det fulde ord “ja” som et positivt svar. Du kan angive “ja” som en parameter til ja, som følger:

yes yes | ./long_script.sh

Sig ikke ja uden at tænke over det

Du skal være sikker på, at det input, du vil indføje i scriptet eller programmet, helt sikkert vil give dig det resultat, du forventer. For at kunne træffe den beslutning skal du kende spørgsmålene, og hvad dine svar skal være.

  Sådan spiller du Psychonauts på Linux

Logikken i scriptet, kommandoen eller programmet svarer muligvis ikke til dine forventninger. I vores eksempelscript kunne spørgsmålet have været “Ønsker du at stoppe? [y,n].” Hvis det havde været tilfældet, ville et negativt svar have givet scriptet mulighed for at fortsætte.

Du skal være bekendt med scriptet, kommandoen eller programmet, før du lystigt sætter ja ind i det.

Bruger ja med kommandoer

I sin vorden ville ja blive brugt med andre Linux-kommandoer. Siden da har de fleste af de andre Linux-kommandoer deres egen måde at køre på uden menneskelig interaktion. ja er ikke længere påkrævet for at opnå det.

Lad os tage Ubuntu-pakkehåndteringen apt-get som et eksempel. For at installere en applikation uden at skulle trykke “y” halvvejs gennem installationen, ville ja være blevet brugt som følger:

yes | sudo apt-get install fortune-mod

Det samme resultat kan opnås ved at bruge -y (antag yes) mulighed i apt-get:

sudo apt-get -y install fortune-mod

Du vil se, at apt-get ikke engang spurgte sin sædvanlige “Vil du fortsætte? [Y/n]” spørgsmål. Det antog bare, at svaret ville være “ja”.

På andre Linux-distributioner er situationen den samme. På Fedora ville du have brugt denne type pakkehåndteringskommando på én gang:

yes | yum install fortune-mod

dnf-pakkehåndteringen har erstattet yum og dnf har sin egen -y (antag ja) mulighed.

dnf -y install fortune-mod

Det samme gælder for cp, fsck og rm. Disse kommandoer har hver deres egne -f (kraft) eller -y (antag ja) muligheder.

Så lader det til, at yes er blevet henvist til kun at arbejde med scripts? Ikke helt. Der er et par flere tricks i den gamle hund endnu.

Nogle yderligere ja-tricks

Du kan bruge ja med en sekvens af cifre genereret af seq til at styre en løkke af gentagne handlinger.

Denne one-liner ekkoer de genererede cifre til terminalvinduet og kalder derefter dvale i et sekund.

  Sådan får du TiddlyWiki til at fungere på Linux

I stedet for blot at ekko cifrene til terminalvinduet, kan du kalde en anden kommando eller et script. Denne kommando eller script behøver ikke engang at bruge cifrene, og de er kun der for at kickstarte hver cyklus i løkken.

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

Nogle gange er det nyttigt at have en stor fil at teste med. Måske vil du øve dig i at bruge zip-kommandoen, eller du vil have en stor fil til at teste FTP-uploads med.

Du kan hurtigt generere store filer med ja. Alt du skal gøre er at give den en lang tekststreng at arbejde med og omdirigere outputtet til en fil. Tag ikke fejl; disse filer vil vokse hurtigt. Vær klar til at trykke på Ctrl+C inden for et par sekunder.

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

Filen, der blev genereret her, tog omkring fem sekunder på den testmaskine, der blev brugt til at undersøge denne artikel. ls rapporterer, at den er 557 Mb stor, og vi fortæller os, at der er 12,4 millioner linjer i den.

Vi kan begrænse størrelsen af ​​filen ved at inkludere head i vores kommandostreng. Vi fortæller det, hvor mange linjer der skal inkluderes i filen. -50 betyder, at hovedet kun slipper 50 linjer igennem til test.txt-filen.

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

Så snart der er 50 linjer i test.txt-filen, stopper processen. Du behøver ikke bruge Ctrl+C. Det kommer til en yndefuld standsning af egen vilje.

wc rapporterer, at der er præcis 50 linjer i filen, 400 ord og den er 2350 bytes stor.

Selvom det stadig er nyttigt til at føre svar ind i langvarige scripts (og et par andre tricks), vil ja-kommandoen ikke være en del af dit daglige værktøjssæt af kommandoer. Men når du har brug for det, vil du opdage, at det er enkeltheden i sig selv – og alt sammen i seks linjer med gylden kode.