Программа имитирует работу терминала, как в Linux.
Работает с виртуальной файловой системой (VFS).
Всё происходит в памяти — файл на диске не меняется.
Цель: создать минимальный прототип. Большинство функций в нем пока представляют собой заглушки, но диалог с пользователем уже поддерживается. Требования:
- Консольный интерфейс (CLI)
- Приглашение к вводу:
VFS$ - Парсер команд с поддержкой раскрытия переменных окружения (
$HOME,${USER}и др.) - Обработка ошибок:
- Неизвестная команда → выводится сообщение
- Неверное количество аргументов для
cd(только 0 или 1 аргумент)
- Команды-заглушки:
ls— выводит своё имя и аргументыcd— выводит своё имя и аргументы + проверка аргументов
- Команда
exit— корректный выход из эмулятора - Обработка прерываний:
Ctrl+C,Ctrl+D
VFS$ ls
[заглушка] команда: ls, аргументы: []
VFS$ ls -la /tmp
[заглушка] команда: ls, аргументы: ['-la', '/tmp']
VFS$ cd /home
[заглушка] команда: cd, аргументы: ['/home']
VFS$ cd /home /tmp
ошибка: cd принимает не более одного аргумента
VFS$ ls $HOME
[заглушка] команда: ls, аргументы: ['/Users/veronikadenisenko']
VFS$ echo ${USER}
ошибка: неизвестная команда: veronikadenisenko
VFS$ git status
ошибка: неизвестная команда: git
VFS$
(пустой ввод — игнорируется)
VFS$ exit
(эмулятор завершён)
Цель: расширить эмулятор возможностью автоматического выполнения команд из файла и гибкой настройки через параметры командной строки. Переменные окружения теперь корректно раскрываются как в интерактивном, так и в скриптовом режиме.
Требования:
Поддержка аргументов командной строки:
- --vfs <путь> — путь к архиву виртуальной файловой системы (зарезервировано для будущих этапов)
- --script <путь> — путь к файлу со списком команд Скриптовый режим:
- Чтение команд из файла, указанного через --script
- Пропуск пустых строк и комментариев (строки, начинающиеся с #)
- Имитация приглашения VFS$ <команда> при выполнении каждой строки
- Автоматическое завершение после окончания скрипта
- Раскрытие переменных окружения в командах:
- Поддержка форматов
$VAR и $ {VAR} - Замена на реальные значения из os.environ (например, $HOME → /home/user)
- Обработка ошибок при работе со скриптом:
- Файл не найден → вывод сообщения об ошибке
- Ошибки чтения/парсинга → перехват исключений, корректное завершение
- Сохранение всех функций из этапа 1:
- Интерактивный режим (если --script не указан)
- Команды-заглушки (ls, cd, exit)
- Обработка Ctrl+C, Ctrl+D
- Проверка аргументов для cd
python shell.py --script start.txt
Цель: подключить виртуальную файловую систему (VFS), полностью работающую в памяти.
Требования:
- Все операции происходят только в памяти — исходный VFS-файл не изменяется.
- VFS загружается из JSON-файла, где двоичные данные (например, содержимое файлов) закодированы в base64.
- Реализованы скрипты для тестирования различных структур VFS:
vfs_minimal.json— минимальная VFS (один файл)vfs_medium.json— несколько файлов и папокvfs_deep.json— иерархия глубиной не менее 3 уровней
- Добавлен стартовый скрипт
test_vfs.sh(или.bat), запускающий эмулятор с разными VFS и командами. - Примеры обработки ошибок: попытка
cdв несуществующую папку,lsнесуществующего пути и т.д. - Результат зафиксирован в репозитории: коммит
{
"a": {
"b": {
"c": {
"file.txt": "dGVzdA=="
}
}
}
}# Запуск с VFS
python shell.py --vfs vfs_deep.json --script start.txt
VFS$ ls
home
VFS$ cd home/user
VFS$ ls
notes.txt
VFS$ cat notes.txt
Hello, VFS!
VFS$ cd /nonexistent
ошибка: путь не найден
VFS$ ls /empty_dir
(пусто)Цель: реализовать базовые команды UNIX-подобной оболочки, работающие с VFS.
Требования:
- Реализованы команды:
ls— список файлов и папок в текущем или указанном каталогеcd— смена текущего каталога (с проверкой существования)cat— вывод содержимого файлаuniq— вывод уникальных строк из файла (аналогuniqв Linux)
- Все команды работают только с VFS, без доступа к реальной файловой системе.
- Обработка ошибок:
- Файл не найден
- Попытка
catна директории - Неверное количество аргументов
- Добавлен стартовый скрипт
test_commands.shс примерами всех режимов. - Результат зафиксирован: коммит
VFS$ cat /home/user/notes.txt
Hello, VFS!
VFS$ uniq /data/duplicates.txt
apple
banana
cherry
VFS$ cat /home
ошибка: /home — это директория
VFS$ uniq
ошибка: требуется имя файла
VFS$ ls /invalid
ошибка: путь не существуетЦель: добавить команды, изменяющие состояние VFS в памяти (без записи на диск).
Требования:
- Реализована команда
cp:- Копирование файла в другую директорию
- Копирование с переименованием
- Поддержка относительных и абсолютных путей
- Все изменения временные — при перезапуске эмулятора VFS возвращается в исходное состояние.
- Обработка ошибок:
- Исходный файл не существует
- Целевой путь — не директория
- Попытка скопировать директорию (не поддерживается)
- Скрипт
test_cp.shдемонстрирует все сценарии. - Результат зафиксирован: [коммит]
VFS$ cp /home/user/notes.txt /tmp/
VFS$ cat /tmp/notes.txt
Hello, VFS!
VFS$ cp /home/user/notes.txt /backup.txt
VFS$ ls /
backup.txt home tmp
VFS$ cp /nonexistent.txt /tmp/
ошибка: исходный файл не найден
VFS$ cp /home /tmp/
ошибка: копирование директорий не поддерживаетсяДля полной проверки всех этапов используйте стартовые скрипты:
# Тест VFS и навигации
python shell.py --vfs vfs_deep.json --script test_vfs.txt
# Тест основных команд
python shell.py --vfs vfs_medium.json --script test_commands.txt
# Тест cp
python shell.py --vfs vfs_minimal.json --script test_cp.txt
# Полный тест (все команды + ошибки)
python shell.py --vfs vfs_deep.json --script full_test.txt💡 Все скрипты (
*.txt) и VFS-файлы (*.json) находятся в корне репозитория.
Выполнила: Вероника Денисенко, ИКБО-51-24 (2 курс)
Репозиторий: github.com/NiksKSS/shell-emulator