Sådan bruges Echo Command på Linux

Den echokommando er perfekt til at skrive formateret tekst til terminalen vindue. Og det behøver ikke at være statisk tekst. Det kan omfatte shellvariabler, filnavne og mapper. Du kan også omdirigere ekko for at oprette tekstfiler og logfiler. Følg denne enkle vejledning for at finde ud af hvordan.

Ekko gentager, hvad du fortæller, at det skal gentages

Zeus var glad for at forlade Mount Olympus for at samle sig med smukke nymfer. På en tur fortalte han en bjergnimfe kaldet Echo om at lægge sin kone, Hera, hvis hun fulgte ham. Hera kom på udkig efter Zeus, og Echo gjorde alt hvad hun kunne for at holde Hera i samtale. Endelig mistede Hera sit temperament og forbandede stakkels ekko, så hun kun gentog de sidste ord, som en anden havde sagt. Hvad Hera gjorde mod Zeus, da hun fangede ham, er nogens gætte.

Og det er stort set echomeget i livet. Det gentager, hvad det er blevet fortalt at gentage. Det er en simpel funktion, men en vital funktion. Uden echoville vi for eksempel ikke kunne få synligt output fra shell-scripts.

Selvom det ikke er fyldt med et væld af klokker og fløjter, er der en god chance for, at der echoer nogle muligheder, som du ikke vidste om, eller som du havde glemt.

ekko? ekko!

De fleste Linux-systemer leverer to versioner af echo. Bash-skallen har sin egen echoindbyggede i den, og der er også en binær eksekverbar version af echo.

Vi kan se de to forskellige versioner ved hjælp af følgende kommandoer:

skriv ekko
hvor er ekko

Den typekommando fortæller os, om kommandoen vi passerer til det som sit argument er en shell indbygget, en binær eksekverbar, et alias, eller en funktion. Det rapporterer til os, at der echoer en shell-indbygget.

Så snart det har fundet et svar, typeholder op med at kigge efter flere kampe. Så det fortæller os ikke, om der er andre kommandoer med samme navn til stede i systemet. Men det fortæller os, hvilken den finder først. Og det er den, der vil blive brugt som standard, når vi udsteder den kommando.

De whereisKommandoen udseende i den binære eksekverbare, kildekode, og man-siden for den kommando, vi overgår til det som sin kommando-line parametre. Det ser ikke efter shell builtins, fordi de ikke har en separat binær eksekverbar. De er en integreret del af Bash-eksekverbarheden.

De whereiskommando rapporter, der echoer en binær eksekverbar placeret i /binmappen.

For at bruge den version af echodig skal du eksplicit kalde det ved at angive stien til den eksekverbare på kommandolinjen:

/ bin / ekko - version

Skalindbygget ved ikke, hvad --versionkommandolinjeargumentet er, det gentager det bare i terminalvinduet:

ekko - version

Eksemplerne, der vises her, bruger alle standardversionen af echoi Bash-shell.

Skrivning af tekst til terminalen

For at skrive en simpel tekststreng til terminalvinduet skal du skrive echoog den streng, du vil have den vist:

ekko Mit navn er Dave.

Teksten gentages for os. Men når du eksperimenterer, opdager du snart, at tingene kan blive lidt mere komplicerede. Se på dette eksempel:

ekko Mit navn er Dave og jeg er en nørd.

Terminalvinduet viser et   > tegn og sidder der og venter. Ctrl + C vender tilbage til kommandoprompten. Hvad skete der?

Enkelt citatet eller apostrofen i ordet ”Jeg er” forvirret echo. Det fortolkede dette enkelt citat som starten på et citeret tekstafsnit. Fordi det ikke registrerede et afsluttende enkelt tilbud,  echoventede på mere input. Det forventede, at yderligere input skulle omfatte det manglende enkelt tilbud, det ventede på.

For at inkludere et enkelt citat i en streng er den enkleste løsning at pakke hele strengen inden for dobbelt anførselstegn:

ekko "Mit navn er Dave og jeg er en nørd."

Indpakning af din tekst i dobbelt anførselstegn er god generel rådgivning. I scripts afgrænser det de parametre, du videregiver til, rent echo. Dette gør læsning - og fejlretning - scripts meget lettere.

Hvad hvis du vil medtage et dobbelt citattegn i din tekststreng? Det er let, sæt bare et tilbageslag \foran det dobbelte anførselstegn (uden mellemrum mellem dem).

ekko "Mit navn er Dave og jeg er en \" nørd. \ ""

Dette indpakker ordet "nørd" i dobbelt anførselstegn for os. Vi ser snart flere af disse tegn, der er undslået med tilbageslag .

Brug af variabler med ekko

Indtil videre har vi skrevet foruddefineret tekst til terminalvinduet. Vi kan bruge variabler til echoat producere output, der er mere dynamisk og har værdier indsat i det for os af skallen. Vi kan definere en simpel variabel med denne kommando:

my_name = "Dave"

En kaldet variabel my_nameer oprettet. Det er tildelt værdien af ​​teksten "Dave." Vi kan bruge variabelnavnet i strengene, som vi overgår til echo , og variabelens værdi skrives til terminalvinduet. Du skal sætte et dollartegn $foran variabelnavnet for at fortælle echo, at det er en variabel.

Der er en advarsel. Hvis du har pakket din streng i enkelte anførselstegn echo , behandles alt bogstaveligt. At have den variable værdi vises, og ikke den navnet på den variabel, bruge dobbelte anførselstegn.

ekko 'Mit navn er $ my_name'
ekko "Mit navn er $ my_name"

Lidt passende er det værd at gentage:

  • Brug af enkelt anførselstegn resulterer i, at teksten skrives bogstaveligt til terminalvinduet .
  • Brug af  dobbelt anførselstegn resulterer i, at variablen fortolkes - også kaldet variabel udvidelse - og værdien skrives til terminalvinduet.

RELATERET: Sådan arbejder du med variabler i Bash

Brug af kommandoer med ekko

Vi kan bruge en kommando med echoog inkorporere dens output i den streng, der er skrevet til terminalvinduet. Vi skal bruge dollartegnet $som om kommandoen var en variabel og pakke hele kommandoen i parentes.

Vi skal bruge dato-kommandoen. Et tip er at bruge kommandoen alene, før du begynder at bruge den med echo. På den måde, hvis der er noget galt med syntaksen for din kommando, identificerer du den og retter den, før du inkluderer den i echokommandoen. Derefter, hvis echokommandoen ikke gør, hvad du forventer, ved du, at problemet skal være med echosyntaksen, fordi du allerede har bevist kommandoens syntaks.

Så prøv dette i terminalvinduet:

dato +% D

Og tilfreds med, at vi får det, vi forventer af datakommandoen, integrerer vi det i en echokommando:

ekko "Dagens dato er: $ (dato +% D)"

Bemærk, at kommandoen er inden for parenteserne, og dollartegnet $ er umiddelbart før den første parentes.

Formatering af tekst med ekko

Indstillingen -e(aktiver backslash escapes) giver os mulighed for at bruge nogle backslash-escape-tegn til at ændre layoutet af teksten. Dette er de backslash-undslap tegn, vi kan bruge:

  • \ a : Alert (historisk kendt som BEL). Dette genererer standardalarmen.
  • \ b : Skriver et backspace-tegn.
  • \ c : Forlader yderligere output.
  • \ e : Skriver en flugtkarakter.
  • \ f : Skriver en formularfeedkarakter.
  • \ n : Skriver en ny linje.
  • \ r : Skriver et linjeskift.
  • \ t : Skriver en vandret fane.
  • \ v : Skriver en lodret fane.
  • \\ : Skriver et tilbageslag.

Lad os bruge nogle af dem og se, hvad de gør.

ekko -e "Dette er en lang tekstlinje \ nsplit på tværs af tre linjer \ nmed \ ttabs \ ton \ tthird \ tline"

Teksten er opdelt i en ny linje, hvor vi har brugt \ntegnene, og der indsættes en fane, hvor vi har brugt \ttegnene.

ekko -e "Her \ vare \ vvertical \ vtabs"

Ligesom de \nnye linjetegn \vflytter en lodret fane teksten til linjen nedenfor. Men i modsætning til de  \n nye linjetegn \vstarter den lodrette fane ikke den nye linje ved kolonne nul. Den bruger den aktuelle kolonne.

De \bbackspace tegn flytte markøren tilbage en karakter. Hvis der skal skrives mere tekst til terminalen, overskriver teksten det forrige tegn.

ekko -e "123 \ b4"

“3” er overskrevet af “4”.

Den \rvognretur tegn gør  echoat vende tilbage til starten af den aktuelle linie og skrive yderligere tekst fra søjle nul.

ekko -e "123 \ r456"

“123” -tegnene overskrives af “456” -tegnene.

Den \aadvarsel tegn vil producere et hørbart ”bip”. Den bruger standardalarmen til dit aktuelle tema.

ekko -e "Lav en pipetone \ a"

Indstillingen -n(ingen ny linje) er ikke en backslash-undsluppet sekvens, men det påvirker kosmetikken i tekstlayoutet, så vi diskuterer det her. Det forhindrer at echotilføje en ny linje til slutningen af ​​teksten. Kommandoprompten vises direkte efter teksten, der er skrevet til terminalvinduet.

ekko -n "ingen sidste nye linje"

Brug af ekko med filer og kataloger

Du kan bruge echosom en slags dårlig mands version af ls. Dine muligheder er få og langt imellem, når du bruger echosådan. Hvis du har brug for nogen form for troskab eller fin kontrol, er du bedre brugt lsog dens legion af muligheder.

Denne kommando viser alle filerne og katalogerne i den aktuelle mappe:

ekko *

Denne kommando viser alle filerne og katalogerne i den aktuelle mappe, hvis navn starter med "D":

ekko D *

Denne kommando viser alle ".desktop" -filerne i det aktuelle bibliotek:

ekko * .desktop

Ja. Dette spiller ikke efter echostyrkerne. Brug ls.

Skrivning til filer med ekko

Vi kan omdirigere output fra echoog enten oprette tekstfiler eller skrive til eksisterende tekstfiler.

Hvis vi bruger >omdirigeringsoperatøren, oprettes filen, hvis den ikke findes. Hvis filen findes, echotilføjes output fra i starten af ​​filen og overskriver tidligere indhold.

Hvis vi bruger >>omdirigeringsoperatøren, oprettes filen, hvis den ikke findes. Outputtet fra echoføjes til slutningen af ​​filen og overskriver ikke noget eksisterende indhold i filen.

ekko "Oprettelse af en ny fil." > sample.txt
ekko "Tilføjelse til filen." >> sample.txt
katteprøve.txt

En ny fil oprettes med den første kommando, og der indsættes tekst i den. Den anden kommando tilføjer en tekstlinje i bunden af ​​filen. Den catkommando viser indholdet af filen til terminalvinduet.

Og selvfølgelig kan vi inkludere variabler for at tilføje nogle nyttige oplysninger til vores fil. Hvis filen er en logfil, vil vi måske have et tidsstempel tilføjet til det. Vi kan gøre det med den næste kommando.

Bemærk de enkelte anførselstegn omkring datekommandoens parametre . De forhindrer, at mellemrummet mellem parametrene fortolkes som slutningen af ​​parameterlisten. De sikrer, at parametrene videregives  date korrekt.

ekko "Logfil startet: $ (dato + '% D% T')"> logfile.txt
kat logfile.txt

Vores logfil er oprettet for os og catviser os, at datestempel og tidsstempel begge blev føjet til den.

RELATERET: Hvad er stdin, stdout og stderr på Linux?

Det er ekkos repertoire

En simpel kommando, men uundværlig. Hvis det ikke eksisterede, skulle vi opfinde det.

Zeus's shenanigans gjorde trods alt noget godt.