Thanks to visit codestin.com
Credit goes to github.com

Skip to content

NiksKSS/shell-emulator

Repository files navigation

Практическая работа №1

Эмулятор командной строки

Описание

Программа имитирует работу терминала, как в Linux.
Работает с виртуальной файловой системой (VFS).

Всё происходит в памяти — файл на диске не меняется.

1 Этап REPL

Цель: создать минимальный прототип. Большинство функций в нем пока представляют собой заглушки, но диалог с пользователем уже поддерживается. Требования:

  • Консольный интерфейс (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

(эмулятор завершён)

2 Этап: Скриптовый режим и аргументы запуска

Цель: расширить эмулятор возможностью автоматического выполнения команд из файла и гибкой настройки через параметры командной строки. Переменные окружения теперь корректно раскрываются как в интерактивном, так и в скриптовом режиме.

Требования:

Поддержка аргументов командной строки:

  • --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

3 Этап: Виртуальная файловая система (VFS)

Цель: подключить виртуальную файловую систему (VFS), полностью работающую в памяти.

Требования:

  • Все операции происходят только в памяти — исходный VFS-файл не изменяется.
  • VFS загружается из JSON-файла, где двоичные данные (например, содержимое файлов) закодированы в base64.
  • Реализованы скрипты для тестирования различных структур VFS:
    • vfs_minimal.json — минимальная VFS (один файл)
    • vfs_medium.json — несколько файлов и папок
    • vfs_deep.json — иерархия глубиной не менее 3 уровней
  • Добавлен стартовый скрипт test_vfs.sh (или .bat), запускающий эмулятор с разными VFS и командами.
  • Примеры обработки ошибок: попытка cd в несуществующую папку, ls несуществующего пути и т.д.
  • Результат зафиксирован в репозитории: коммит

Пример структуры VFS (vfs_deep.json фрагмент)

{
  "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
(пусто)

4 Этап: Основные команды

Цель: реализовать базовые команды 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
ошибка: путь не существует

5 Этап: Дополнительные команды

Цель: добавить команды, изменяющие состояние 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

About

ИКБО-51-24 configuration management homework

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors