TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #562 785
Как правильно обрабатывать stdin в скриптах

Хороший CLI-скрипт должен уметь принимать данные: из файла, из pipe (|) и из stdin. И делать это предсказуемо.

▪️ Проверка: есть ли stdin


if [ -t 0 ]; then
echo "stdin пуст (ввод с терминала)"
else
echo "данные пришли через pipe"
fi


-t 0 - stdin подключен к терминалу
иначе - есть входной поток

▪️ Базовый шаблон


#!/usr/bin/env bash

if [ -t 0 ]; then
echo "Usage: command < file | pipe"
exit 1
fi

while IFS= read -r line; do
echo ">> $line"
done


Теперь скрипт работает так:


cat file.txt | script.sh


▪️ Универсальный вариант (stdin + файл)


input="${1:-/dev/stdin}"

while IFS= read -r line; do
echo "$line"
done < "$input"
Теперь можно:
script.sh file.txt
cat file.txt | script.sh


🤩 Частая ошибка


for line in $(cat file.txt); do
echo "$line"
done


Она ломает: пробелы, табы и пустые строки

🤩 Правильно


while IFS= read -r line; do
echo "$line"
done < file.txt


BashTex 📱 #scripts #stdin
  • 👍 5
More from @bash_tex
  1. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  2. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  3. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  4. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  5. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
  6. Sep 30, 2026DEBUG trap - как Bash выполняет код перед каждой командой В Bash есть специальный DEBUG tr…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →