Jak korzystać z polecenia Echo w systemie Linux
- Dave McKay
@TheGurkha
- 29 października 2019 r., Godz. 8:00 EDT
echo
jest idealne do zapisywania sformatowanego tekstu w oknie terminala. I nie musi to być tekst statyczny. Może zawierać zmienne powłoki, nazwy plików i katalogi. Możesz także przekierować echo, aby utworzyć pliki tekstowe i pliki dziennika. Postępuj zgodnie z tym prostym przewodnikiem, aby dowiedzieć się, jak to zrobić.
Echo powtarza to, co powiesz, aby powtórzyć
Zeus lubił opuszczać Olimp, aby zadawać się z pięknymi nimfami. Podczas jednej z wypraw powiedział górskiej nimfie o imieniu Echo, żeby zabiła jego żonę Herę, jeśli pójdzie za nim. Hera przyszła szukać Zeusa, a Echo zrobiła wszystko, co w jej mocy, aby utrzymać Hera w rozmowie. W końcu Hera straciła panowanie nad sobą i przeklęła biedne Echo, tak że powtórzyła tylko ostatnie słowa, które powiedział ktoś inny. To, co Hera zrobiła Zeusowi, kiedy go dogoniła, to tylko przypuszczenie.
I to właściwie jest echo
życie. Powtarza to, co mu powiedziano. To prosta funkcja, ale istotna. Bez echo
nie moglibyśmy na przykład uzyskać widocznych danych wyjściowych ze skryptów powłoki.
Chociaż nie jest obciążony mnóstwo dzwonków i gwizdków, istnieje duża szansa, że echo
ma pewne możliwości, o których nie wiedziałeś lub o których zapomniałeś.
echo? echo!
Większość systemów Linux udostępnia dwie wersje echo
. Powłoka Bash ma wbudowane własne echo
, a także binarną wersję wykonywalną echo
.
Możemy zobaczyć dwie różne wersje, używając następujących poleceń:
type echo
whereis echo
type
mówi nam, czy polecenie, które przekazujemy mu jako jego argument, jest wbudowaną powłoką, binarnym plikiem wykonywalnym, aliasem czy funkcją. Zgłasza nam, że echo
to wbudowana powłoka.
Gdy tylko znajdzie odpowiedź, przestaje szukać dalszych dopasowań. Więc nie mówi nam, czy w systemie są inne polecenia o tej samej nazwie. Ale mówi nam, który z nich znajdzie jako pierwszy. I to jest ten, który będzie używany domyślnie, gdy wydamy to polecenie.
Polecenie whereis
szuka binarnego pliku wykonywalnego, kodu źródłowego i strony podręcznika dla polecenie, które przekazujemy do niego jako parametr wiersza polecenia. Nie szuka wbudowanych poleceń powłoki, ponieważ nie mają one oddzielnego binarnego pliku wykonywalnego. Są integralną częścią pliku wykonywalnego Bash.
Polecenie whereis
zgłasza, że echo
jest binarnym plikiem wykonywalnym znajdujący się w katalogu /bin
.
Aby użyć tej wersji echo
, musisz wyraźnie wywołać ją, podając ścieżka do pliku wykonywalnego w wierszu poleceń:
/bin/echo --version
Wbudowana powłoka nie wie, co --version
argumentem wiersza poleceń jest, po prostu powtarza go w oknie terminala:
echo --version
Wszystkie pokazane tutaj przykłady używają domyślnego wersja echo
, w powłoce Bash.
Pisanie tekstu do terminala
Aby napisać prosty ciąg tekstu w oknie terminala wpisz echo
i ciąg, który chcesz wyświetlić:
echo My name is Dave.
Tekst jest dla nas powtórzony. Ale w miarę eksperymentowania szybko odkryjesz, że sprawy mogą się nieco bardziej skomplikować. Spójrz na ten przykład:
echo My name is Dave and I"m a geek.
W oknie terminala wyświetlany jest znak >
i siedzi tam, czekając. Ctrl + C spowoduje powrót do wiersza poleceń. Co tam się stało?
Pojedynczy cudzysłów lub apostrof w słowie „Jestem” zdezorientowany echo
. Zinterpretował ten pojedynczy cytat jako początek cytowanej sekcji tekstu. Ponieważ nie wykrył zamykającego pojedynczego cudzysłowu, echo
czekał na dalsze dane wejściowe. Oczekiwano, że dalsze dane wejściowe obejmują brakujący pojedynczy cudzysłów, na który czekał.
Aby umieścić pojedynczy cudzysłów w ciągu, najprostszym rozwiązaniem jest umieszczenie całego ciągu w cudzysłowie:
echo "My name is Dave and I"m a geek."
Zawijanie tekstu w podwójnych cudzysłowach to dobra rada ogólna. W skryptach wyraźnie ogranicza parametry przekazywane do echo
. To znacznie ułatwia czytanie – i debugowanie – skryptów.
A co, jeśli chcesz umieścić w ciągu tekstowym znak podwójnego cudzysłowu?To proste, po prostu umieść lewy ukośnik \
przed podwójnym cudzysłowem (bez spacji między nimi).
echo "My name is Dave and I"m a \"geek.\""
W ten sposób słowo „maniakiem” zawija się dla nas w podwójny cudzysłów. Wkrótce zobaczymy więcej takich znaków ze zmiennym ukośnikiem.
Używanie zmiennych z echo
Jak dotąd , zapisywaliśmy predefiniowany tekst w oknie terminala. Możemy użyć zmiennych z echo
, aby wygenerować bardziej dynamiczne dane wyjściowe z wartościami wstawionymi do niego za nas przez powłokę. można zdefiniować prostą zmienną za pomocą tego polecenia:
my_name="Dave"
Zmienna o nazwie my_name
została utworzona. Została przypisał wartość tekstu „Dave”. Możemy użyć nazwy zmiennej w łańcuchach, które przekazujemy do echo
, a wartość zmiennej zostanie zapisana w oknie terminala. Musisz umieścić znak dolara $
przed nazwą zmiennej, aby echo
wiedział, że jest to zmienna.
Jest zastrzeżenie. Jeśli opakowałeś swój ciąg w pojedyncze cudzysłowy, echo
potraktuje wszystko dosłownie. Aby wyświetlić wartość zmiennej, a nie nazwę zmiennej, użyj podwójnych cudzysłowów.
echo "My name is $my_name"
echo "My name is $my_name"
Dość trafnie, warto to powtórzyć:
- Stosowanie pojedynczych cudzysłowów powoduje, że tekst jest zapisywany w oknie terminala w sposób dosłowny.
- Użycie podwójnych cudzysłowów skutkuje interpretowana zmienna – nazywana także interpretacją zmiennych – a wartość jest zapisywana w oknie terminala.
ZWIĄZANE Z: Jak pracować ze zmiennymi w Bash
Używanie poleceń z echo
Możemy użyć polecenia z echo
i włączyć jego wyjście do łańcucha, który jest zapisywany w oknie terminala. Musimy użyć znaku dolara $
tak, jakby polecenie było zmienną, i zawinąć całe polecenie w nawiasy.
Zamierzamy użyć polecenia date . Jedną wskazówką jest użycie samego polecenia, zanim zaczniesz go używać z echo
. W ten sposób, jeśli coś jest nie tak ze składnią polecenia, zidentyfikuj to i popraw przed dołączeniem do polecenia echo
. Następnie, jeśli polecenie echo
nie zrobi tego, czego oczekujesz, będziesz wiedział, że problem musi dotyczyć składni echo
, ponieważ już udowodniliśmy składnię polecenia.
Więc spróbuj tego w oknie terminala:
date +%D
I jesteśmy zadowoleni, że jesteśmy otrzymując to, czego oczekujemy od polecenia date, zintegrujemy je z echo
poleceniem:
echo "Today"s date is: $(date +%D)"
Zwróć uwagę, że polecenie znajduje się w nawiasach, a znak dolara $
znajduje się bezpośrednio przed pierwszym nawiasem.
Formatowanie tekstu za pomocą echa
Opcja -e
(włącz znaki ucieczki odwrotnym ukośnikiem) umożliwia nam użycie niektórych znaków ze znakami ucieczki odwrotnym ukośnikiem do zmiany układu tekstu. Oto znaki ucieczki odwrotnym ukośnikiem, których możemy użyć:
Użyjmy niektórych z nich i zobaczmy, co robią.
echo -e "This is a long line of text\nsplit across three lines\nwith\ttabs\ton\tthe\tthird\tline"
Tekst jest podzielony na nowy wiersz, w którym użyliśmy znaków \n
, i wstawiono tabulator, w którym użyliśmy znaków \t
.
echo -e "Here\vare\vvertical\vtabs"
Podobnie jak \n
znaki nowego wiersza, pionowa tabulacja \v
przenosi tekst do wiersza poniżej. Jednak w przeciwieństwie do \n
znaków nowego wiersza, pionowa tabulacja \v
nie rozpoczyna nowego wiersza w kolumnie zero. Używa bieżącej kolumny.
\b
znaki cofania przesuwają kursor o jeden znak wstecz. Jeśli jest więcej tekstu do zapisania na terminalu, tekst ten nadpisze poprzedni znak.
echo -e "123\b4"
„3” jest zastępowane znakiem „ 4 ”.
\r
znak powrotu karetki powoduje, że echo
wraca na początek bieżącego wiersza i napisz dalszy tekst z kolumny zerowej.
echo -e "123\r456"
Znaki „123” są zastępowane znakami „456”.
Znak \a
znak ostrzegawczy spowoduje słyszalny dźwięk. Używa domyślnego dźwięku alertu dla bieżącego motywu.
echo -e "Make a bleep\a"
-n
(bez nowej linii) nie jest sekwencją ze znakami ucieczki odwrotnym ukośnikiem, ale ma wpływ na wygląd układu tekstu, więc omówimy ją tutaj. Zapobiega ona dodawaniu echo
nowa linia na końcu tekstu. Wiersz polecenia pojawia się bezpośrednio po tekście wpisywanym w oknie terminala.
echo -n "no final newline"
Używanie echo z plikami i katalogami
Możesz użyć echo
jako sortowania wersji dla biednych ls
. Masz niewiele opcji, kiedy używasz echo
w ten sposób. Jeśli potrzebujesz jakiejkolwiek wierności lub dokładnej kontroli, lepiej użyj ls
i całej gamy opcji.
To polecenie wyświetla wszystkie pliki i katalogi w bieżącym katalogu:
echo *
To polecenie wyświetla wszystkie pliki i katalogi w bieżącym katalogu, których nazwa zaczyna się na literę „D”:
echo D*
To polecenie wyświetla listę wszystkich plików „.desktop” w bieżącym katalogu:
echo *.desktop
Tak. To nie jest gra dla zalet echo
. Użyj ls
.
Zapisywanie do plików z echo
Możemy przekierować dane wyjściowe z echo
i albo utwórz pliki tekstowe, albo zapisz do istniejących plików tekstowych.
Jeśli użyjemy operatora przekierowania >
, plik zostanie utworzony, jeśli nie istnieje. Jeśli plik istnieje, dane wyjściowe z echo
są dodawane na początku pliku, nadpisując wszelkie poprzednie treści.
Jeśli użyjemy , plik jest tworzony, jeśli nie istnieje. Dane wyjściowe z echo
są dodawane na końcu pliku i nie zastępują żadnej istniejącej zawartości pliku.
echo "Creating a new file." > sample.txt
echo "Adding to the file." >> sample.txt
cat sample.txt
Nowy plik jest tworzony przez pierwsze polecenie i wstawiany jest tekst w tym. Drugie polecenie dodaje wiersz tekstu na dole pliku. Polecenie cat
wyświetla zawartość pliku w oknie terminala.
I oczywiście możemy dołączyć zmienne, aby dodać przydatne informacje do naszego pliku. Jeśli plik jest plikiem dziennika, możemy chcieć dodać do niego znacznik czasu. Możemy to zrobić za pomocą następnego polecenia.
Zwróć uwagę na pojedyncze cudzysłowy wokół parametrów polecenia date
. Zapobiegają interpretowaniu odstępu między parametrami jako końca listy parametrów. Zapewniają prawidłowe przekazanie parametrów do date
.
echo "Logfile started: $(date +"%D %T")" > logfile.txt
cat logfile.txt
Nasz plik dziennika jest tworzony dla nas i cat
pokazuje nam, że dodano do niego zarówno datownik, jak i znacznik czasu.
ZWIĄZANE : Co to są stdin, stdout i stderr w Linuksie?
To jest Repertuar echo
Proste polecenie, ale niezbędne. Gdyby nie istniała, musielibyśmy ją wymyślić.
Przecież sztuczki Zeusa zrobiły coś dobrego.
Dave McKay jako pierwszy używał komputerów, gdy w modzie była taśma perforowana i od tamtej pory zajmuje się programowaniem. Po ponad 30 latach w branży IT, obecnie jest dziennikarzem zajmującym się technologiami na pełen etat. W swojej karierze pracował jako niezależny programista, kierownik międzynarodowego zespołu programistycznego, kierownik projektu usług IT, a ostatnio jako inspektor ochrony danych. Dave jest ewangelistą Linuksa i zwolennikiem oprogramowania open source. Przeczytaj całą biografię „