Собственная имплементация shell
оболочки.
- Отображает подсказку при ожидании новой команды.
- Имеет рабочую историю.
- Находит и запускает нужный исполняемый файл (на основе переменной
PATH
, или используя.относительный
, илиабсолютный путь
) - Дескриптор
’
(одинарная кавычка), который препятствует интерпретации оболочкой метасимволов в последовательности, заключенной в кавычки. - Дескриптор
"
(двойная кавычка), который препятствует интерпретации оболочкой метасимволов в последовательности, заключенной в кавычки, за исключением$
(знака доллара). - Имплементация перенаправления:
<
перенаправляет ввод>
перенаправляет вывод<<
указываем разделитель, затем считывает входные данные до тех пор, пока не будет видна строка, содержащая разделитель>>
перенаправляет вывод в режиме добавления
- Реализуйте каналы (
|
символ). Вывод каждой команды в канал соединяется со входом следующей команды через канал. - Обрабатывает переменные окружения (
$
, за которыми следует последовательность символов), которые заменяются на их значения. - Обрабатывает
$?
, который заменяется статусом последней выполненной команды. - Обрабатывает
ctrl-C
,ctrl-D
иctrl-\
, которые ведут себя как вbash
. - В интерактивном режиме:
ctrl-C
выводит новое приглашение на новой строкеctrl-D
завершает работу оболочкиctrl-\
ничего не делает
- Имплементация
builtins
(встроенные в оболочку команды):echo
с опцией-n
cd
только сотносительным
илиабсолютным путем
pwd
без опцийexport
без опцийunset
без опцийenv
без опций и аргументовexit
без опций
В Makefile
следует указать путь до readline
в поле READLINE_FLAGS
.
READLINE_FLAGS= -lreadline
Замените <username>
на свой
READLINE_FLAGS= -lreadline -L/Users/<username>/.brew/opt/readline/lib
make
chmod +x minishell
./minishell