Przejdź do głównej zawartości

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).

Okno terminala
read [opcje] [zmienna...]
  • Jeśli nie podano zmiennych – dane trafiają do zmiennej REPLY.
  • Domyślnie read czyta jedną linię zakończoną znakiem nowej linii.

ParametrOpis
-a <tablica>Zapisz słowa wejścia jako elementy tablicy.
-d <znak>Użyj innego znaku zakończenia niż nowa linia.
-eWłą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.
-rNie interpretuj backslashów (np. \\n).
-sTryb „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.

Okno terminala
# 1) Pobranie danych od użytkownika
read -p "Podaj swoje imię: " imie
echo "Witaj, $imie!"
Okno terminala
# 2) Wczytanie pliku linia po linii
while read -r linia; do
echo "Linia: $linia"
done < plik.txt
Okno terminala
# 3) Timeout 5 sekund
if read -t 5 -p "Wpisz coś w ciągu 5 sekund: " dane; then
echo "Wpisałeś: $dane"
else
echo "Przekroczono czas."
fi
Okno terminala
# 4) Tryb cichy – wprowadzanie hasła
read -s -p "Hasło: " haslo
echo "\nHasło zapisane do zmiennej."
Okno terminala
# 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.

Błąd / KomunikatPrzyczynaRozwiązanie
read: bad optionOpcja nieobsługiwanaSprawdź wersję powłoki (np. dash ma mniej opcji niż bash).
timeout bez efektuNiektóre powłoki nie wspierają -tUżyj basha lub alternatywnego mechanizmu (select, read -t).
Brak danych w pętli while z potokuUruchomienie w subshelluPrzekieruj plik (< plik) zamiast używać potoku lub użyj mapfile.