ddatsko / myshell

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Практична myshell 3
Виконав: Дацко Денис

Передумови:
    - Бібліотека Boost::program_options 1.71+
    - Бібліотека readline
    - C++ компілятор з підтримкою 17-го стандарту С++
    - cmake 3.17+
    - GNU make

Компіляція:
Для компіяції виконайте наступні команди
    - $ mkdir build
    - $ cd build
    - $ cmake .. -G "Unix Makefiles"
    - $ make

Запуск:
    Запустити файл myshell ( $ ./myshell [ <script_filename> ])
       - Якщо вказати ім'я файлу - інтерпретатор його виконає, інакше запуститься інтерактивний режим



Примітки до реалізації:
    - Щоб запутити сервер потрібно ввести команду у форматі $ ./myshell --server [ --port <port_num> ]
    - Все логування іде у захардкоджений файл log.txt. Варто перенести це в CLI, але поки що так
    - Виправив Warning, пов`язаний з викликом tmpnam





Старі примітки: (те, що лишилося з практичної 2):
    - Я реалізував усі потрібні функції
    - У var=$(<command>) в якості команди можна засунути майже все (і пайп, і щось з перенаправленням, і т.д., ), проте не гарантую, що все працюватиме добре
    - В загальному, все, що є на cms працює добре. Проте, я не впевнений, що парсер зможе добре розпарсити дуже щакручені комбінації
    - Пайпи для вбудованих команд не працюють зовсім, проте з перенаправленням все ок
    - Щодо Memory Leaks, Valgrind не знайшов нічого





Старі примітки (те, що лишилося в README з першої практичної !!!!!!!!!!!)
    - Я перевіряв усе з Valgrind на memory leaks - все ОК

    - Я реалізував підтримку "" i ''

    - Я реалізував Escape Characters (\X), правда, вони працюють трохи по-іншому, ніж в BASH-i.
        (Якщо стоїть символ \ - то наступний завжди вважається Escape character-ом)
        Наприклад, у мене з
            $ mecho "\g"
        argv будуть
            ["mecho", "g"]
        а в BASH-i
            ["mecho", "\g"]

    - Я реалізуавв підтримку присвоєння локальних змінних середовища
        Приклад використання:
        - $ a=10 <something>
        ** Зауважте, що тут <something> проігнорується

    - Нотатка: всі змінні, що є в environ при запуску myshell відразу екпортуються, тобто якщо першою ж командою
        викликати myshell, дочірній матиме ті самі змінні, що й батьківський

    - Якщо мені щось було незрозуміло, я орієнтувався на те, як це відбувається в BASH

    - ./<name>.msh працює дуже криво і тільки з файлами з розширенням .msh
        , але я нічого кращого не придумав, бо інакше скрипт запускається в /bin/sh

    - Якщо видалити шлях до myshell i mycat в PATH - вони не працюваимуть

About


Languages

Language:C++ 96.0%Language:CMake 3.7%Language:C 0.3%