Console script manager based on YAML format
Project description
Bashmator - консольный менеджер скриптов, основанный на формате YAML.
Основная задача программы - предоставить простую и универсальную систему для хранения, поиска, запуска и логирования большого количества небольших скриптов и однострочников.
Как это работает
Каждый скрипт вносится в YAML файл. В этом файле с помощью ключей задаются аргументы командной строки, параметры подстановки их значений в код скрипта, используемая оболочка, а также информация, по которой этот скрипт можно будет найти.
YAML файлы хранятся в папке (библиотеке). Для каждой библиотеки bashmator собирает необходимую информацию о доступных скриптах и поддерживает её актуальность, чтобы обеспечить возможность быстрого поиска.
Установка
Устанавливать bashmator рекомендуется через pipx. Пример:
sudo pipx install bashmator --global
В комадной строке станет доступен под короткими названиям bashmator и bshm.
Далее рекомендуется добавить оболочку и пересканить библиотеку:
bashmator shell add /usr/bin/bash
bashmator library scan -f
Использование
|
Оболочки
Не смотря на название, bashmator способен работать не только с bash. Ниже представлены примеры команд добавления некоторых других оболочек, интерпритаторов и программ:
Linux
bashmator shell add /usr/bin/zsh
bashmator shell add /usr/bin/python3
bashmator shell add /usr/bin/node --popen-args '["-e"]'
bashmator shell add /usr/bin/msfconsole --popen-args '["-q", "-x"]'
Windows
⚠️ Для powershell и cmd важно указать кодировку, что бы логирование с помощью
use -o <file> ...работало корректно
bashmator shell add C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe --popen-args "['-Command']" --encoding 'cp866' --name powershell
bashmator shell add C:\Windows\System32\cmd.exe --popen-args "['/C']" --encoding 'cp866' --name cmd
bashmator shell add C:\...path\to\python\...\python.exe --name python3
Потенциально bashmator может работать с любыми интерпритаторами, способными принимать последовательность команд из аргументов командной строки. Флаг, отвечающий за прием последовательности команд, должен всегда располагаться в конце списка, передаваемого в аргументе --popen-args.
Создание библиотек
Рекомендуется создавать собственные библиотеки, а не добавлять свои скрипты в библиотеку по умолчанию.
Библиотекой будет считаться любой каталог, содержащий следующие подкаталоги:
-
files- каталог для файлов, используемых в скриптами. Полезен для повышения совместимости. -
modules- каталог для YAML файлов.
Данные подкаталоги могут иметь собственные подкаталоги - bashmator будет их учитывать в работе.
Добавить библиотеку в bashmator и выбрать её для использования:
bashmator library add <path to library>
bashmator library use <library name>
Создание YAML модулей
Минимальная структура, необходимая для работы:
shell: <SHELL NAME>
script: |-
<YOUR CODE>
Общая структура
author: <NAME>
description: <TEXT>
tags:
- <TAG1>
- <TAG2>
- ...
install: <INSTALLATION INFORMATION>
arguments:
<ARG NAME>:
default: <EMPTY, STRING OR LIST>
description: <TEXT>
metavar: <STRING>
multiple: <TRUE | FALSE>
replacer: <VALUE REPLACER>
regex: <REGEX STRING>
<OTHER ARG NAME>:
...
...
mode:
readfile:
- <ARG NAME>
...
replace:
<ARG NAME>:
<VALUE TO REPLACE>: <REPLACEMENT>
loop: <ARG NAME>
format:
<ARG NAME>: <.format() TEMPLATE>
<OTHER ARG>: ...
...
join:
<ARG NAME>: <DELIMITER>
<OTHER ARG>: ...
...
pformat:
<ARG NAME>: <.format() TEMPLATE>
<OTHER ARG>: ...
...
shell: <MAIN SHELL SHORT NAME OR PATH>
script: |-
<YOUR MAIN CODE>
file_<NUMBER>:
path: <SHORT PATH TO FILE AT LIBRARY/FILES DIRECTORY>
replacer: <FULL PATH REPLACER>
description: <TEXT>
file_<OTHER NUMBER>:
...
...
item_<NUMBER>:
shell: <OTHER SHELL SHORT NAME OR PATH>
description: <TEXT>
mode:
<SAME STRUCTURE AS AT MAIN>
script: |-
<YOUR OTHER CODE>
item_<OTHER NUMBER>:
...
...
Описание ключей:
author
Содержит имя автора модуля, используется для поиска и удовлетворения чувства собственной значимости😅. Пример:
author: vinzekatze
description
Содержит общую информацию о работе скрипта, которая будет выведена при вызове помощи use <script name> -h или use <script name> --help.
Для большего удобства рекомендуется использовать |-. Пример:
description: |-
Набор однострочников для получение базовой DNS информации
tags
Содержит список тегов, по которым можно будет найти скрипт с помощью команды search. Пример:
tags:
- 53
- dns
- recon
install
Содержит информацию о ПО, которое необходимо установить для правильной работы скрипта. Данная информация будет отображена при вызове скрипта с помощью команды use -i <script name>.
Если есть возможность, рекомендуется писать сразу последовательность команд для установки, либо явно указывать, что установка чего-либо не требуется. Пример:
install: |-
sudo apt update -y && sudo apt install dnsrecon -y
arguments
Содержит имена аргументов и их параметры. На основе заданных тут данных bashmator создает CLI для скрипта.
Рекомендуется использовать полные названия для позиционных аргументов, и однобуквенные для опций.
replacer по умолчанию: #[ARGUMENT NAME]#
Общий вид:
arguments:
n:
default: 42
metavar: NUM
regex: \d+
arg:
replacer: __B__
multiple: true
description: bla bla bla
Ключи аргументов:
defaultОпределяет значение аргумента по умолчанию, либо список возможных значений. Если Если a:
default: 53
Если a:
default:
-
Если a:
default:
- https://
- http://
Если arg:
default:
-
- one
- two
descriptionСодержит описание назначения аргумента, которое будет выведено при вызове помощи arg:
description: очень важный аргумент
metavarКосметический ключ, позволяющий задать свое метазначение для опций. На позиционные аргументы не влияет. Пример: arg:
default: 42
metavar: MY_METAVAR
Отображение:
multipleОпределяет, может ли аргумент принимать множественные значения, или нет. По умолчанию arg:
multiple: true
replacerСодержит строку, котороя будет заменятья в коде скрипта (ключ Реплейсеры в коде скрипта заменяются в том порядке, в каком описаны ключи в Если ключ отсутвует либо пуст, то реплейсер принимает значение Пример реплейсеров и скрипта: arguments:
arg:
replacer: -+PLACEHOLDER+-
script: >-
cat -+PLACEHOLDER+- | ncat 127.0.0.1 9090
regexПозволяет задать регулярное выражение, с помощью которого будут проверяться значения аргумента. Не прошедие проверку значения будут вызывать ошибку и не позволять запустить скрипт. Для проверки используется функция Пример: arguments:
ip:
regex: >-
((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3,3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])
script: 'echo #ip# is ok'
Реакция скрипта на ввод:
|
mode
Используется для модификации значений аргументов. Общий вид:
mode:
readfile:
- arg2
replace:
arg3:
v1: value1
v2: value2
loop: arg1
format:
arg2: '{0!r}'
join:
arg2: ','
arg3: ';'
pformat:
arg2: ' [ {} ] '
Ключи mode:
readfileСодержит список имен аргументов, которые будут интерпритированы как имена файлов. Данные файлы будут читаться построчно, а считанные строки будут подставляться в скрипт на место реплейсера. Если файла не существует, то будет подставлено входящиее значение аргумента. Пример: shell: bash
arguments:
arg1:
description: test
mode:
readfile:
- arg1
script: >-
echo #arg1#
Содержимое файла
Если запустить скрипт с аргументом echo one two three
replaceПодзволяет заменять значения аргументов. Содержит в себе имена аргументов в качестве ключей, которые в свою очередь содержат замены в виде Пример: shell: bash
arguments:
arg1:
default:
- A
- B
- C
mode:
replace:
arg1:
A: One
B: Two
script: >-
echo #arg1#
В данном примере, когда на вход скрпта в аргумент loopЕсли содержит имя множественного аргумента ( Пример: shell: bash
arguments:
arg1:
multiple: true
mode:
loop: arg1
script: >-
echo -n #arg1#; echo ' end'
Результат выполнения скрипта c аргументами
formatСодержит имена аргументов в качестве ключей и шаблоны python функции Для множественных аргументов форматирование производится для каждого из значений отдельно. Операция Обычно этот ключ применяется для правильной подстановки неоднозначных значений с использованием шаблона Пример: shell: bash
arguments:
arg1:
default:
-
arg2:
multiple: true
mode:
format:
arg1: >-
| tee {0!r}
arg2: >-
{0!r}
script: >-
echo #arg1# #arg2#
Если запустить скрипт с аргументами echo 'a' 'd' 'c' 'r' 't'
Если с аргументами echo 'a' 'd' 'c' 'r' 't' | tee './test.txt'
joinСодержит имена множественных аргументов ( Пример: join:
arg1: ','
В этом случае значения множественного аргумента
pformatТоже что и |
shell
В данном ключе указывается короткое имя оболочки, используемой для запуска скрипта, либо путь до неё.
В целях улучшения совместимости рекомендуется добавлять оболочки в bashmator с помощью bashmator shell add, а в ключе shell указывать их короткие имена.
Данный ключ обязателен, если отсутствуют ключи item_[NUMBER], либо для каждого из них не заданы shell отдельно.
Пример:
shell: bash
Это тоже сработает, но так делать не рекомендуется:
shell: /usr/bin/bash
script
Содержит непосредственно код скрипта, который будет исполняться. Не забудьте вставить реплейсеры аргументов!
Чтобы записывать многострочные скрипты используйте |-. Чтобы записать однострочник, но в коде использовать перенос строки, используйте >-
Пример 1:
script: |-
ls -la
rm -r ./
Пример 2:
script: >-
ls -la;
rm -r ./
file_[NUMBER]
Используется для подстановки полных путей файлов из директории files библиотеки.
replacer по умолчанию: #file_[NUMBER]#
Общий вид:
file_1:
description: My Wordlist
path: dicts/my_wordlist.txt
file_2:
description: My Big Script
path: scripts/big_script.sh
replacer: __BIG_SCRIPT__
quote:
- '"'
- '\'
Ключи file_[NUMBER]:
path
Содержит путь до файла в библиотеке относительно директории file_1:
path: lorem/lorem.txt
Так же можно обращаться к файлам по полному пути и использовать возвраты в родительскую директорию, но этого делать не рекомендуется. Скорее всего я закрою эту возможность спустя какое-то время, так как это больше баг, чем фитча 🥲. replacerРаботает аналогично ключу descriptionСодержит краткое описание файла, которое будет выведено при вызове помощи quoteПри наличии использует первый символ из списка для заковычивания пути, а второй - для экранирования аналогичного символа, если он в изначальном пути содержится. Пример: file_1:
path: "lorem folder/lorem'.txt"
quote:
- "'"
- '\'
При выполнении подставит следующую строку:
|
item_[NUMBER]
Используется для добавления дополнительных скриптов в один модуль. Это удобно, когда разные скрипты принимают на вход одни и те же аргументы и объеденены общим смыслом.
Если существуют item, то в CLI добавляется опция --item, которая позволяет вызывать подскрипты по номеру. Для массового запуска можно использовать последовательности: --item 1,2,4-6.
Если вместе с item существует основной script, то ему будет присвоен номер 0. Запускаться по умолчанию будет только он.
Общий вид:
item_1:
description: script 1
shell: python3
script: |-
print(1+2)
item_2:
description: script 2
mode:
loop: arg1
script: echo _ARG1_
Ключи item_[NUMBER]:
shellРаботает аналогично ключу modeРаботает аналогично ключу Чтобы отметить действие item_2:
script: echo _A_
mode:
loop:
descriptionСодержит краткое описание назначения script
Работает аналогично главному |
Примеры YAML модулей представлены во встроенной библиотеке:
$ bashmator search examples
Search results:
script name | status | tags
------------------------------+----------+-----------------------------
examples/args/choice | OK | help, manual, arguments
examples/args/choice_default | OK | help, manual, arguments
examples/args/default | OK | help, manual, arguments
examples/args/default_empty | OK | help, manual, arguments
examples/args/flag | OK | help, manual, arguments
examples/args/metavar | OK | help, manual, arguments
examples/args/multiple | OK | help, manual, arguments
examples/args/regex | OK | help, manual, arguments
examples/args/replacer | OK | help, manual, arguments
examples/args/simple | OK | help, manual, arguments
examples/files/replacer | OK | help, manual, files
examples/files/simple | OK | help, manual, files
examples/items/default | OK | help, manual, items
examples/items/mode | OK | help, manual, items
examples/items/shell | OK | help, manual, items
examples/items/simple | OK | help, manual, items
examples/minimal | OK |
examples/mode/format | OK | help, manual, mode
examples/mode/format_empty | OK | help, manual, mode
examples/mode/join | OK | help, manual, mode
examples/mode/loop | OK | help, manual, mode
examples/mode/pformat | OK | help, manual, mode
examples/mode/readfile | OK | help, manual, mode
examples/mode/replace | OK | help, manual, mode
examples/simple | OK | help, manual, informational
Пример работы
Ниже представлен пример запуска скрипта examples/args/simple:
Аргументы командной строки, сгенерированные из YAML
$ bashmator use examples/args/simple -h
usage: examples/args/simple [-h] arg
Example of a simple required argument
.................................................................
positional arguments:
arg random string
options:
-h, --help show this help message and exit
Shell: bash
Author: demo
Tags: help, manual, arguments
Запуск скрипта с включенной опцией логирования
$ bashmator use -o example.log examples/args/simple blablabla
Input: blablabla
Содержимое записанного файла example.log
$ cat example.log
+-------------------------------------------------------------------------------
+ Generated by bashmator 1.1.1
+-------------------------------------------------------------------------------
+ Script name: examples/args/simple (0)
+ Start time: 2023-06-29 16:11:25 (UTC)
+ Shell: /usr/bin/bash -c
+-------------------------------------------------------------------------------
+ Running code
+-------------------------------------------------------------------------------
echo 'Input: blablabla'
+-------------------------------------------------------------------------------
+ Log
+-------------------------------------------------------------------------------
Input: blablabla
+-------------------------------------------------------------------------------
+ End time: 2023-06-29 16:11:25 (UTC)
+-------------------------------------------------------------------------------
Доступные библиотеки
Общего назначения для kali linux:
Тестирование WiFi для kali linux на Raspberry Pi 4:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bashmator-1.1.9.tar.gz.
File metadata
- Download URL: bashmator-1.1.9.tar.gz
- Upload date:
- Size: 46.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-85-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5dbdd0d9c685673700c9b9dcb062f6b6ffeecd5f0a6be9b3b0aef8b67a270da5
|
|
| MD5 |
efd5abb77b99a92404f0688afac2909e
|
|
| BLAKE2b-256 |
cdd8ec4a9a940afbe530a673f07c446c5edfe2621a0195a1272dce7f8471b478
|
File details
Details for the file bashmator-1.1.9-py3-none-any.whl.
File metadata
- Download URL: bashmator-1.1.9-py3-none-any.whl
- Upload date:
- Size: 47.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-85-generic
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8abe454f6ce7ce9aca1d88550ce18f95849961f23972b8b7e3f559f54f5b06a1
|
|
| MD5 |
1f978c8221ff664b37de3907d4664e57
|
|
| BLAKE2b-256 |
22ff628b695cb72bf058b776227deb18af0d50a1d938da499772a0f743a5f42d
|