/tiny-shell

Командный интерпретатор по примеру bash на Си

Primary LanguageC

ℹ️ tiny-shell

Этот проект посвящен созданию простой командной оболочки.

screen-gif

Эта оболочка:

  • отображает приглашение при ожидании новой команды;
  • имеет историю команд;
  • находит и запускает нужный исполняемый файл (на основе переменной PATH или с использованием относительного или абсолютного пути);
  • осуществляет перенаправления:
    • < перенаправляет ввод
    • > перенаправляет вывод
    • << указывает разделитель, затем считывает входные данные до тех пор, пока не появится строка, содержащая разделитель
    • >> перенаправляет вывод в режиме добавления
  • реализовывает каналы (| символ). Выходные данные каждой команды подключаются к входу следующей команды через канал.
  • обрабатывает переменные среды ($, за которыми следует последовательность символов);
  • обрабатывать переменную $?, которая принимает значение статуса выхода самой последней команды;
  • обработывает ctrl-C, ctrl-D и ctrl-\, которые ведут себя как в bash;
  • в интерактивном режиме:
    • ctrl-C отображает новое приглашение ввода в новой строке
    • ctrl-D завершает работу оболочки
    • ctrl-\ ничего не делает
  • реализовывает следующие встроенные функции:
    • echo с опцией -n
    • cd
    • pwd без каких-либо опций
    • export без опций
    • unset
    • env без параметров или аргументов
    • exit

🔨 Build

screen-gif

Чтобы собрать командную оболочку, склонируйте этот репозиторий и перейдите в директорию с проектом:

git clone https://github.com/zagaynov-andrew/tiny-shell.git && cd tiny-shell

Затем соберите командный интерпретатор:

make

📌 Для успешной сборки вам понадобятся установленные GNU Make и библиотека readline.

🚀 Launch

Для запуска командной оболочки введите:

./tinyshell