Skip to content

Python implementation of a shell with some basic commands like 'ls', 'cd', '>', '>>', ' grep', etc.

Notifications You must be signed in to change notification settings

sash00k/python-based-shell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MyShell

  1. Необходимо поддержать команды для работы с каталогами:

    • pwd -- выводит текущую рабочую директорию
    • cd <dir> -- меняет текущую рабочую директорию на указанную. Работает как с абсолютными, так и с относительными путями
    • mkdir <name> -- создает новую директорию с заданным именем в текущей рабочей директории. Если директория с таким именем уже существовала, выводит "cannot create directory 'name': file exists".
    • ls [<dir>] -- выводит список всех файлов в указанной директории (или в текущей рабочей директории, если dir не указан), в алфавитном порядке
  2. Команды cat <file1> [<file2>, <file3>, ...] и tac <file, [<file2>, <file3>, ...] выводящие содержимое указанных файлов в прямом и обратном порядке соответственно.

  3. Поддержать перенаправление вывода команд: операторы > и >>

  4. Наконец, реализовать команду grep "<pattern>" <file>, выводящую все строки из файла, в которых встречается указанный паттерн. Для простоты будем считать, что pattern задается корректным регулярным выражением Python. Кроме того команда может принимать следующие дополнительные аргументы:

    • -c -- означает, что вместо вывода самих строк необходимо вывести количество строк в файле, подходящее под заданный паттерн.
    • -r -- означает, что необходимо искать подходящие строки в файлах рекурсивно.
      • При указании этого аргумента вместо file можно передать в качестве последнего аргумента директорию, которую необходимо рекурсивно (включая поддиректории) просканировать. В таком случае в качестве отчета команда должно возвращать список пар вида <путь>:<строка> из пути до файла, где нашлось совпадение и подходящей строки. Обходить директории и файлы нужно в алфавитном порядке.
      • Если при указании -r не была указана директория, то начинать поиск с текущей директории.
      • Если при указании -r вместо директории был указан файл, то -r игнорируется.
    • аргументы -c -r можно указывать одновременно и в любом порядке.

Формат входных данных:

Вам необходимо реализовать функцию solution(script: TextIO, output: TextIO) -> None в файле shell.py, которая принимает на вход два уже открытых файла для входных и выходных данных.

В первом файле script записана последовательность команд (по одной на строчку), которые нужно выполнить в вашем shell-е.

Формат выходных данных:

В выходной файл output нужно записать последовательный вывод всех выполненных команд (в случае, если их вывод не перенаправлялся в файл с помощью > или >>). Вывод каждой следующей команды начинается с новой строки.

Пример входных и выходных данных:

изначальная структура каталогов input output
.
├── dir1
│ └── dir2
│ └── another_text_file.txt
└── some_text_file.txt
mkdir test
cd test
cd ..
ls
mkdir test2
ls
dir1 some_text_file.txt test
dir1 some_text_file.txt test test2
.
├── dir1
│ └── dir2
│ └── another_text_file.txt
└── some_text_file.txt

Содержимое файлов:

some_text_file.txt:
just some text

another_text_file.txt:
and some more text
and even more
cat ./some_text_file.txt ./dir1/dir2/another_text_file.txt > result.txt
tac result.txt
ls
and even more
just some text and some more text
dir1 result.txt some_text_file.txt
.
└── some_text_file.txt
Содержимое файла some_text_file.txt:
this is a text with some words
we need to get only strings with
word text in it
so, not this one
grep "text" some_text_file.txt this is a text with some words
word text in it
.
└── test
└── some_text_file.txt
Содержимое файла some_text_file.txt:
this is a text with some numbers: 42
we need to get only strings with them
123 224
1122
grep "\d+" test/some_text_file.txt
grep -c "\d+" test/some_text_file.txt
this is a text with some numbers: 42
123 224
1122
3
.
├── another_text_file.txt
└── some_text_file.txt
Содержимое файлов:

another_text_file.txt:
and some more text
and even more

some_text_file.txt:
just some text
grep -r "text"
grep -r -c "text"
another_text_file.txt:and some more text
some_text_file.txt:just some text
another_text_file.txt:1
some_text_file.txt:1

About

Python implementation of a shell with some basic commands like 'ls', 'cd', '>', '>>', ' grep', etc.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages