Для чтения из стандартного потока ввода (stdin) или из файла, обычно используют функции или утилиты, предоставляемые операционной системой и языком программирования. Если вам нужен скрипт на Bash, команда `cat` по умолчанию читает из stdin, если ей не переданы аргументы с именами файлов.
Пример улучшенной версии утилиты `cat` на Bash, которая проверяет наличие аргумента (имени файла), и если он не указан, читает из `stdin`:
```bash
#!/bin/bash
# Проверяем, передан ли хотя бы один аргумент скрипту
if [ $# -eq 0 ]; then
# Поток ввода - stdin
cat
else
# Иначе считываем данные из файла(ов)
for fname in "$@"; do
if [ -e "$fname" ]; then
cat "$fname"
else
echo "Файл $fname не существует." >&2
fi
done
fi
```
Сохраните этот скрипт в файл с каким-нибудь именем, например `mycat.sh`, сделайте его исполняемым:
```bash
chmod +x mycat.sh
```
И теперь вы можете использовать `./mycat.sh` для чтения из `stdin` при отсутствии аргументов или для чтения из файла, если имя файла указано в качестве аргумента.
Если вы хотите использовать другой язык программирования, такой как Python, для выполнения аналогичной задачи, вот пример скрипта на Python:
```python
#!/usr/bin/env python3
import sys
# Проверяем, переданы ли аргументы (имена файлов)
if len(sys.argv) == 1:
# Если нет аргументов, читаем из stdin
for line in sys.stdin:
print(line, end='')
else:
# Иначе, читаем из файлов
for fname in sys.argv[1:]:
try:
with open(fname, 'r') as f:
print(f.read(), end='')
except FileNotFoundError:
print(f"Файл {fname} не найден.", file=sys.stderr)
```
Этот скрипт можно запустить так же, как Bash-скрипт, предварительно сделав его исполняемым:
```bash
chmod +x mycat.py
```
Теперь вы можете использовать `./mycat.py` для чтения данных аналогично предыдущему примеру.