-
Notifications
You must be signed in to change notification settings - Fork 0
kir-dan/simple_shell
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
ЗАДАНИЕ ПРАКТИКУМА "Модельный Shell-интерпретатор" Предлагается реализовать под управлением ОС Unix интерактивный командный интерпретатор, осуществляющий в цикле считывание командной строки со стандартного ввода, анализ и исполнение соответствующих действий. Задание выполняется в несколько этапов. 1) Написать программу, выполняющую в цикле чтение строк со стандартного ввода и разделяющую строки на отдельные слова. Любое количество идущих подряд пробельных символов обрабатывается так же, как один пробел. Текст, заключенный в двойные кавычки, рассматривается как одно слово или часть слова, т.е. внутри двойных кавычек пробельные символы рассматриваются как обычные символы. Например: aaa "bbb ccc" ddd aaa bbb ccc ddd aaaa "bbb"ccc"ddd" eee aaaa bbbcccddd eee Допускаются строки произвольной длины, т.е. программа должна вести себя корректно вне зависимости от того, какой длины строка подана на ввод (!). Программа завершает работу в ситуации "конец файла" на стандартном вводе. Обработка конца файла должна быть реализована корректно. Требование к коду: в программе после считывания очередной строки должен быть сформирован _список_ полученных слов, и только после этого слова должны выводиться на экран, чтобы продемонстрировать корректную работу. 2) Вызов внешних команд. Модифицировать программу таким образом, чтобы она воспринимала первое полученное слово как имя команды, остальные - как параметры команды и осуществляла исполнение введенных команд (программ, находящихся на диске в директориях, перечисленных в переменной PATH, или указанных по полному имени). Дополнить программу _встроенной_ командой cd для смены текущего каталога. 3) Модифицировать подпрограмму чтения (1й этап) таким образом, чтобы она воспринимала символ '&' (если он встречен _вне_ кавычек) как разделительный символ (т.е. символ, который является отдельным словом сам по себе). Реализовать выполнение команд в фоновом режиме. Запускать в фоновом режиме команды, последним словом в котором является символ '&'. Если символ '&' встречен не в конце, выдавать сообщение об ошибке. По завершении команды, выполнявшейся в фоновом режиме, выдавать сообщение о ее завершении и код завершения. 4) Модифицировать подпрограмму чтения таким образом, чтобы символы '|' и, в зависимости от варианта, символ '<', '>' или '>>' воспринимались как разделительные. Реализовать одно из трех перенаправлений ввода-вывода (в зависимости от варианта). 5) Реализовать запуск команд конвейером. В минимальном варианте достаточно реализовать конвейр из двух команд, при наличии в командной строке более чем одного символа '|' выдавать сообщение об ошибке. В полном варианте ограничений на длину конвейера быть не должно. ----------------------------------------- В качестве дополнения к основной части (по требованию преподавателя) реализовать: - связку ';' (сначала выполняется одна команда, потом вторая) - связку '||' (сначала выполняется первая команда, и если она завершилась неудачей, то выполнятеся вторая команда) - связку '&&' (сначала выполняется первая команда, и если она завершилась успешно, то выполнятеся вторая команда) - круглые скобки (содержимое скобок, имеющее произвольную сложность, выполняется как отдельно взятая команда). Эту возможность можно выбирать только вместе с одной из трех предыдущих, в противном случае невозможно проверить ее наличие. - обратные апострофы (подстановка результата выполнения команды). - просмотр и модификацию переменной PATH
About
Интерпретатор командной строки Unix написанный на С
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published