Skip to content

kir-dan/simple_shell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

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

No packages published

Languages