Skip to content

NikGorojanin/shell

Repository files navigation

SHELL

Интерпретатор командной строки, позволяющий выполнять команды пользователя. Кроме того это язык программирования, в котором есть конструкции while, if, for, grep и т.д.

Начало работы

Требования

С++11

Знание синтаксиса языка bash

Использование

Необходимо подключить заголовочный файл:

#include "shell.h"

Создать экземпляр класса Shell:

Shell shell = Shell();

Для выполнения команд разделенных операторами ||, &&, ;, скобками, а также символами вывода результата в файл, используется метод execute:

shell.execute("(ls && cd ../) || (ls && cat test.txt)");

Результат выполнения команды выведется в консоль. Для дальнейшего использования результата можно использовать перегруженный метод execute, принимающий вторым аргументом ссылку на экземпляр класса CmdExecResult:

CmdExecResult result;
shell.execute("ls && cat test.txt", result);

В случае успешного выполнения команды, result.success примет значение true, а результат запишется в result.success_result, иначе result.success примет значение false, а текст ошибки запишется в result.error_result.

Для выполнения команд разделенных операторами | (pipe), необходимо использовать соответствующие методы класса Shell:

void execute_piped_command(string& command_line);
void execute_piped_command(string& command_line, CmdExecResult& result);

Для выполнения команд в режиме background:

void execute_background(string& command_line, function<void(CmdExecResult&)> f);

Здесь f - коллбек-функция, принимающая ссылку на экземпляр класса CmdExecResult.

Запуск тестов

Создать в папке cmake-build-debug файлы ar.zip большого размера, test.txt, test2.txt, test3.txt Ввести в слово "hello!" в файл test.txt без ковычек

Ограничания

Нельзя использовать команды типа pipe(|) с другими операторами(||, &&, ;) Нельзя выполнять команды требующие участия пользователя (nano, emacs и т.д.)

Автор

Горожанин Никита

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •