read
- read – polecenie builtin w powłokach POSIX (
bash
,dash
,ksh
,zsh
), służące do odczytywania linii wejścia ze standardowego wejścia lub innego deskryptora. - Zastosowania: pobieranie danych od użytkownika, wczytywanie plików linia po linii, parsowanie wejścia w potokach.
- W powłoce Bash posiada wiele opcji rozszerzających możliwości (timeout, edycja, odczyt z pliku, wyłączenie interpretacji backslashów).
Składnia
Dział zatytułowany „Składnia”read [opcje] [zmienna...]
- Jeśli nie podano zmiennych – dane trafiają do zmiennej REPLY.
- Domyślnie
read
czyta jedną linię zakończoną znakiem nowej linii.
Parametry
Dział zatytułowany „Parametry”Parametr | Opis |
---|---|
-a <tablica> | Zapisz słowa wejścia jako elementy tablicy. |
-d <znak> | Użyj innego znaku zakończenia niż nowa linia. |
-e | Włącz edycję linii (Readline) przy odczycie z terminala. |
-i <tekst> | Tekst domyślny w trybie -e . |
-n <liczba> | Wczytaj maksymalnie tyle znaków. |
-N <liczba> | Wczytaj dokładnie tyle znaków (może obejmować nowe linie). |
-p <tekst> | Wyświetl podpowiedź przed odczytem. |
-r | Nie interpretuj backslashów (np. \\n ). |
-s | Tryb „silent” – nie wyświetlaj wpisywanych znaków (hasła). |
-t <sekundy> | Timeout – przerwij po określonym czasie. |
-u <fd> | Czytaj z określonego deskryptora pliku zamiast stdin. |
Przykłady użycia
Dział zatytułowany „Przykłady użycia”# 1) Pobranie danych od użytkownikaread -p "Podaj swoje imię: " imieecho "Witaj, $imie!"
# 2) Wczytanie pliku linia po liniiwhile read -r linia; do echo "Linia: $linia"done < plik.txt
# 3) Timeout 5 sekundif read -t 5 -p "Wpisz coś w ciągu 5 sekund: " dane; then echo "Wpisałeś: $dane"else echo "Przekroczono czas."fi
# 4) Tryb cichy – wprowadzanie hasłaread -s -p "Hasło: " hasloecho "\nHasło zapisane do zmiennej."
# 5) Rozdzielenie wejścia na tablicęread -a liczby <<< "10 20 30"echo "Pierwsza: ${liczby[0]}"
- Builtin:
read
jest wbudowany w powłokę – nie istnieje jako osobny program binarny. - Podział na słowa: Domyślnie używa separatorów z
$IFS
. - EOF: Jeśli wejście zakończy się przed odczytem,
read
zwraca kod wyjścia ≠ 0. - Tryb interaktywny: Opcje
-e
i-i
działają tylko przy wejściu z terminala. - Bezpieczne hasła:
-s
nie wyświetla znaków, ale dane nadal są w pamięci procesu.
Najczęściej spotykane błędy i jak je naprawić
Dział zatytułowany „Najczęściej spotykane błędy i jak je naprawić”Błąd / Komunikat | Przyczyna | Rozwiązanie |
---|---|---|
read: bad option | Opcja nieobsługiwana | Sprawdź wersję powłoki (np. dash ma mniej opcji niż bash). |
timeout bez efektu | Niektóre powłoki nie wspierają -t | Użyj basha lub alternatywnego mechanizmu (select , read -t ). |
Brak danych w pętli while z potoku | Uruchomienie w subshellu | Przekieruj plik (< plik ) zamiast używać potoku lub użyj mapfile . |