{"id":34115078,"url":"https://github.com/vinzekatze/bashmator","last_synced_at":"2026-01-16T03:39:25.286Z","repository":{"id":124914242,"uuid":"536467551","full_name":"vinzekatze/bashmator","owner":"vinzekatze","description":"Bashmator is a console script manager based on YAML format.","archived":false,"fork":false,"pushed_at":"2026-01-12T20:55:25.000Z","size":644,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-13T01:31:08.235Z","etag":null,"topics":["automation","automation-framework","automation-tool","cli","hacking-tool","hacking-tools","liner","liners","management","manager","multiplatform","one-liner","one-liners","oneliner","oneliners","penetration-testing-tools","pentest-tool","pentesting-tools","script-manager","shell-scripting"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vinzekatze.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-09-14T07:43:33.000Z","updated_at":"2026-01-12T20:51:32.000Z","dependencies_parsed_at":"2024-08-22T21:16:50.063Z","dependency_job_id":"8d94e541-44ba-40bf-9bb6-a42a5a2b09da","html_url":"https://github.com/vinzekatze/bashmator","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/vinzekatze/bashmator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinzekatze%2Fbashmator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinzekatze%2Fbashmator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinzekatze%2Fbashmator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinzekatze%2Fbashmator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vinzekatze","download_url":"https://codeload.github.com/vinzekatze/bashmator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinzekatze%2Fbashmator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28477204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T03:13:13.607Z","status":"ssl_error","status_checked_at":"2026-01-16T03:11:47.863Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automation","automation-framework","automation-tool","cli","hacking-tool","hacking-tools","liner","liners","management","manager","multiplatform","one-liner","one-liners","oneliner","oneliners","penetration-testing-tools","pentest-tool","pentesting-tools","script-manager","shell-scripting"],"created_at":"2025-12-14T19:50:57.780Z","updated_at":"2026-01-16T03:39:25.277Z","avatar_url":"https://github.com/vinzekatze.png","language":"Python","readme":"\u003ch1 align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/vinzekatze/bashmator/main/static/bashmator.png\" alt=\"bshm\" width=\"500px\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/vinzekatze/bashmator\"\u003e\u003cimg src=\"https://img.shields.io/github/release/vinzekatze/bashmator?style=flat-square\"\u003e\u003c/a\u003e\n  \u003ca href=\"http://www.python.org/download/\"\u003e\u003cimg src=\"https://img.shields.io/badge/python-3.10+-blue.svg?style=flat-square\u0026logo=python\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vinzekatze/bashmator\"\u003e\u003cimg src=\"https://img.shields.io/badge/linux-✔️-green.svg?style=flat-square\u0026logo=linux\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vinzekatze/bashmator\"\u003e\u003cimg src=\"https://img.shields.io/badge/macos-✔️-green.svg?style=flat-square\u0026logo=macos\u0026logoColor=white\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/vinzekatze/bashmator\"\u003e\u003cimg src=\"https://img.shields.io/badge/win-✔️%20%5Bnot%20tested%20enough%5D-orange.svg?style=flat-square\u0026logo=windows\"\u003e\u003c/a\u003e\n  \u003c/br\u003e\n\u003c/h1\u003e\n\n__Bashmator__ - консольный менеджер скриптов, основанный на формате YAML.\n\nОсновная задача программы - предоставить простую и универсальную систему для хранения, поиска, запуска и логирования большого количества небольших скриптов и однострочников.\n\n# Как это работает\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/vinzekatze/bashmator/main/static/how_it_works.png\" alt=\"bshm\" width=\"1000px\"\u003e\n\u003c/div\u003e\n\nКаждый скрипт вносится в YAML файл. В этом файле с помощью ключей задаются аргументы командной строки, параметры подстановки их значений в код скрипта, используемая оболочка, а также информация, по которой этот скрипт можно будет найти.\n\nYAML файлы хранятся в папке (библиотеке). Для каждой библиотеки bashmator собирает необходимую информацию о доступных скриптах и поддерживает её актуальность, чтобы обеспечить возможность быстрого поиска.\n\n# Установка\nУстанавливать bashmator рекомендуется через pipx. Пример:\n```bash\nsudo pipx install bashmator --global\n```\nВ комадной строке станет доступен под короткими названиям `bashmator` и `bshm`.\n\nДалее рекомендуется добавить оболочку и пересканить библиотеку:\n```\nbashmator shell add /usr/bin/bash\nbashmator library scan -f\n```\n\n# Использование\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator [-h] [-v] {use,search,set,shell,library} ...\n\n                                        __     _  \n    _           _             _         \\ \\   | | \n   | |_ ___ ___| |_ _____ ___| |_ ___ ___\\ \\ / __)\n   | . | .'|_ -|   |     | .'|  _| . |  _|\u003e \u003e\\__ \\\n   |___|__,|___|_|_|_|_|_|__,|_| |___|_| / / (   /\n    by vinzekatze                       /_/   |_| \n    version 1.1.9\n    \n.................................................................\n\nused library: default\n\ncommands:\n  {use,search,set,shell,library}\n    use                 use script\n    search              search script at library by keywords\n    set                 settings\n    shell               shells management\n    library             libraries management\n\noptions:\n  -h, --help            show this help message and exit\n  -v, --version         show program's version number and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator use --help\u003c/code\u003e\u003c/summary\u003e\n  \n```\nusage: bashmator use [-l] [-o FILE] [-i] [-c] [-h] script ...\n\nRuns a script from the library by it's name.\n\n.................................................................\n\npositional arguments:\n  script               script name and it's options\n\nscript launch options:\n  -l, --log-headers    print log headers when executing script\n  -o FILE, --out FILE  log execution process to file (append\n                       mod)\n\ncode printing options:\n  -i, --install        show script's installation information\n  -c, --code           print script without execution\n\nother options:\n  -h, --help           show this help message and exit\n```\n  \n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator search --help\u003c/code\u003e\u003c/summary\u003e\n  \n```\nusage: bashmator search [-i] [-A] [-D] [-S] [-h] [keyword ...]\n\nSearch for a script in the used library. By default, the search\nis performed by tags and script names.\n\n.................................................................\n\npositional arguments:\n  keyword            keywords for search\n\nsearch options:\n  -i, --ignore-case  ignore case distinctions\n  -A, --author       add search by author\n  -D, --description  add search by script description\n  -S, --shell        add search by shell\n\nother options:\n  -h, --help         show this help message and exit\n```\n  \n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator set --help\u003c/code\u003e\u003c/summary\u003e\n  \n```\nusage: bashmator set [--auto-scan {true,false}]\n                     [--color {true,false}] [-h]\n\nCurrent setings:\n  auto-scan True\n  color True\n\n.................................................................\n\nsettings:\n  --auto-scan {true,false}\n                        automatically detect changes in the\n                        used library\n  --color {true,false}  use color on the command line\n\nother options:\n  -h, --help            show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator shell --help\u003c/code\u003e\u003c/summary\u003e\n  \n```\nusage: bashmator shell [-h] {add,delete} ...\n\ncommands:\n  {add,delete}\n    add         add a new shell to the known list\n    delete      remove a shell from the known list\n\noptions:\n  -h, --help    show this help message and exit\n\n.................................................................\n\nknown shells:\n name    | path             | popen arguments   | encoding\n---------+------------------+-------------------+------------\n bash    | /usr/bin/bash    | ['-c']            | utf-8\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator shell add --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator shell add [--name NAME] [--encoding CODE]\n                           [--popen-args LIST] [-h]\n                           path\n\nAdd a new shell to the known list.\n\n.................................................................\n\npositional arguments:\n  path               full path to the shell (for example:\n                     /usr/bin/bash)\n\noptions:\n  --name NAME        specify shell name (default: base name)\n  --encoding CODE    shell encoding (used when logging;\n                     default: 'utf-8')\n  --popen-args LIST  shell arguments for the subprocess.Popen\n                     function (default: '[\"-c\"]')\n  -h, --help         show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator shell delete --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator shell delete [-h] name [name ...]\n\nRemove a shell from the known list. Use 'delete ALL' to clear.\n\n.................................................................\n\npositional arguments:\n  name        shell name (can be multiple)\n\noptions:\n  -h, --help  show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator library --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator library [-h] {add,delete,scan,use} ...\n\ncommands:\n  {add,delete,scan,use}\n    add                 add a new library to the known list\n    delete              remove library from the known list\n    scan                detect changes in the used library\n    use                 select library for use\n\noptions:\n  -h, --help            show this help message and exit\n\n.................................................................\n\nknown libraries:\n name    | status   | path\n---------+----------+----------------------------------\n default | IN USE   | /home/vinzekatze/workspace/apps/\n         |          | bashmator/library\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator library add --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator library add [--name NAME] [-h] path\n\nAdd a new library to the known list.\n\n.................................................................\n\npositional arguments:\n  path         path to main library directory\n\noptions:\n  --name NAME  specify library name (default: folder name)\n  -h, --help   show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator library delete --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator library delete [-h] name [name ...]\n\nRemove a library from the known list. Type 'delete ALL' to clear.\n\n.................................................................\n\npositional arguments:\n  name        library name (can be multiple)\n\noptions:\n  -h, --help  show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator library scan --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator library scan [-f] [-h]\n\nScans the directory of the used library for changes in it's\ncontents.\n\n.................................................................\n\noptions:\n  -f, --forced  reset the saved information and rescan the\n                library\n  -h, --help    show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003ebashmator library use --help\u003c/code\u003e\u003c/summary\u003e\n\n```\nusage: bashmator library use [-h] name\n\nSelect the library to use from the known list.\n\n.................................................................\n\npositional arguments:\n  name        library name\n\noptions:\n  -h, --help  show this help message and exit\n```\n\n\u003c/details\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n# Оболочки\nНе смотря на название, bashmator способен работать не только с bash. Ниже представлены примеры команд добавления некоторых других оболочек, интерпритаторов и программ:\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eLinux\u003c/b\u003e\u003c/summary\u003e\n\n```\nbashmator shell add /usr/bin/zsh\nbashmator shell add /usr/bin/python3\nbashmator shell add /usr/bin/node --popen-args '[\"-e\"]'\nbashmator shell add /usr/bin/msfconsole --popen-args '[\"-q\", \"-x\"]'\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eWindows\u003c/b\u003e\u003c/summary\u003e\n\n\u003e⚠️ _Для powershell и cmd важно указать кодировку, что бы логирование с помощью `use -o \u003cfile\u003e ...` работало корректно_\n\n```\nbashmator shell add C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe --popen-args \"['-Command']\" --encoding 'cp866' --name powershell\nbashmator shell add C:\\Windows\\System32\\cmd.exe --popen-args \"['/C']\" --encoding 'cp866' --name cmd\nbashmator shell add C:\\...path\\to\\python\\...\\python.exe --name python3\n```\n\n\u003c/details\u003e\n\nПотенциально bashmator может работать с любыми интерпритаторами, способными принимать последовательность команд из аргументов командной строки. Флаг, отвечающий за прием последовательности команд, должен всегда располагаться в конце списка, передаваемого в аргументе `--popen-args`.\n\n# Создание библиотек\n\u003e _Рекомендуется создавать собственные библиотеки, а не добавлять свои скрипты в библиотеку по умолчанию._\n\nБиблиотекой будет считаться любой каталог, содержащий следующие подкаталоги:\n\n- `files` - каталог для файлов, используемых в скриптами. Полезен для повышения совместимости.\n\n- `modules` - каталог для YAML файлов.\n\nДанные подкаталоги могут иметь собственные подкаталоги - bashmator будет их учитывать в работе.\n\nДобавить библиотеку в bashmator и выбрать её для использования:\n\n```\nbashmator library add \u003cpath to library\u003e\nbashmator library use \u003clibrary name\u003e\n```\n\n# Создание YAML модулей\nМинимальная структура, необходимая для работы:\n\n```yaml\nshell: \u003cSHELL NAME\u003e\nscript: |-\n  \u003cYOUR CODE\u003e\n```\n\u003cdetails\u003e\n  \u003csummary\u003eОбщая структура\u003c/summary\u003e\n\n```yaml\nauthor: \u003cNAME\u003e\ndescription: \u003cTEXT\u003e\ntags:\n  - \u003cTAG1\u003e\n  - \u003cTAG2\u003e\n  - ...\ninstall: \u003cINSTALLATION INFORMATION\u003e\n\narguments:\n  \u003cARG NAME\u003e:\n    default: \u003cEMPTY, STRING OR LIST\u003e\n    description: \u003cTEXT\u003e\n    metavar: \u003cSTRING\u003e\n    multiple: \u003cTRUE | FALSE\u003e\n    replacer: \u003cVALUE REPLACER\u003e\n    regex: \u003cREGEX STRING\u003e\n  \u003cOTHER ARG NAME\u003e:\n    ...\n  ...\n\nmode:\n  readfile:\n    - \u003cARG NAME\u003e\n    ...\n  replace:\n    \u003cARG NAME\u003e:\n      \u003cVALUE TO REPLACE\u003e: \u003cREPLACEMENT\u003e\n  loop: \u003cARG NAME\u003e\n  format:\n    \u003cARG NAME\u003e: \u003c.format() TEMPLATE\u003e\n    \u003cOTHER ARG\u003e: ...\n    ...\n  join:\n    \u003cARG NAME\u003e: \u003cDELIMITER\u003e\n    \u003cOTHER ARG\u003e: ...\n    ...\n  pformat:\n    \u003cARG NAME\u003e: \u003c.format() TEMPLATE\u003e\n    \u003cOTHER ARG\u003e: ...\n    ...\n\nshell: \u003cMAIN SHELL SHORT NAME OR PATH\u003e\nscript: |- \n  \u003cYOUR MAIN CODE\u003e\n\nfile_\u003cNUMBER\u003e:\n  path: \u003cSHORT PATH TO FILE AT LIBRARY/FILES DIRECTORY\u003e\n  replacer: \u003cFULL PATH REPLACER\u003e\n  description: \u003cTEXT\u003e\nfile_\u003cOTHER NUMBER\u003e:\n  ...\n...\n\nitem_\u003cNUMBER\u003e:\n  shell: \u003cOTHER SHELL SHORT NAME OR PATH\u003e\n  description: \u003cTEXT\u003e\n  mode: \n    \u003cSAME STRUCTURE AS AT MAIN\u003e\n  script: |-\n    \u003cYOUR OTHER CODE\u003e\nitem_\u003cOTHER NUMBER\u003e:\n  ...\n...\n```\n\n\u003c/details\u003e\n\n## Описание ключей:\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eauthor\u003c/b\u003e\u003c/summary\u003e\n\nСодержит имя автора модуля, используется для поиска и удовлетворения чувства собственной значимости😅. Пример:\n\n```yaml\nauthor: vinzekatze\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003edescription\u003c/b\u003e\u003c/summary\u003e\n\nСодержит общую информацию о работе скрипта, которая будет выведена при вызове помощи `use \u003cscript name\u003e -h` или `use \u003cscript name\u003e --help`.\n\nДля большего удобства рекомендуется использовать `|-`. Пример:\n\n```yaml\ndescription: |-\n  Набор однострочников для получение базовой DNS информации\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003etags\u003c/b\u003e\u003c/summary\u003e\n\nСодержит список тегов, по которым можно будет найти скрипт с помощью команды `search`. Пример:\n\n```yaml\ntags:\n  - 53\n  - dns\n  - recon\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003einstall\u003c/b\u003e\u003c/summary\u003e\n\nСодержит информацию о ПО, которое необходимо установить для правильной работы скрипта. Данная информация будет отображена при вызове скрипта с помощью команды `use -i \u003cscript name\u003e`.\n\nЕсли есть возможность, рекомендуется писать сразу последовательность команд для установки, либо явно указывать, что установка чего-либо не требуется. Пример:\n\n```yaml\ninstall: |-\n  sudo apt update -y \u0026\u0026 sudo apt install dnsrecon -y\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003earguments\u003c/b\u003e\u003c/summary\u003e\n\nСодержит имена аргументов и их параметры. На основе заданных тут данных bashmator создает CLI для скрипта.\n\nРекомендуется использовать полные названия для позиционных аргументов, и однобуквенные для опций.\n\n`replacer` по умолчанию: `#[ARGUMENT NAME]#`\n\nОбщий вид:\n\n```yaml\narguments:\n  n:\n    default: 42\n    metavar: NUM\n    regex: \\d+\n  arg:\n    replacer: __B__\n    multiple: true\n    description: bla bla bla\n    \n```\n\nКлючи аргументов:\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003edefault\u003c/b\u003e\u003c/summary\u003e\n\nОпределяет значение аргумента по умолчанию, либо список возможных значений.\n\nЕсли `default` пуст, либо отсутствует, аргумент будет обязательным.\n\nЕсли `default` содержит строковое или числовое значение, то аргумент будет опцией, которая по умолчанию будет подставлять указанное значение. Пример:\n\n```yaml\n  a:\n    default: 53\n```\n\nЕсли `default` - список из одного пустого значения, то аргумент будет опцией с пустым значением по умолчанию. Пример:\n\n```yaml\n  a:\n    default:\n      -\n```\n\nЕсли `default` содержит список из двух элементов, то аргумент будет флагом, подставляющим первое значение когда отсутствует в команде, а второе - когда присутствует. Пример:\n\n```yaml\n  a:\n    default:\n      - https://\n      - http://\n```\n\nЕсли `default` содержит список из более чем трех элементов, аргумент сможет принимать только значения из списка. Если при этом первый элемент пуст, то аргумент будет обязательным, если же нет - первое значение из списка будет использоваться по умолчанию. Пример:\n\n```yaml\n  arg:\n    default:\n      -\n      - one\n      - two\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003edescription\u003c/b\u003e\u003c/summary\u003e\n\nСодержит описание назначения аргумента, которое будет выведено при вызове помощи `use \u003cscript name\u003e -h` или `use \u003cscript name\u003e --help`. Пример:\n\n```yaml\n  arg:\n    description: очень важный аргумент\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003emetavar\u003c/b\u003e\u003c/summary\u003e\n\nКосметический ключ, позволяющий задать свое метазначение для опций. На позиционные аргументы не влияет.\n\nПример:\n```yaml\narg:\n  default: 42\n  metavar: MY_METAVAR\n```\n\nОтображение:\n```\nusage: test [--arg MY_METAVAR] [-h]\n\noptions:\n  --arg MY_METAVAR  (default: '42')\n  -h, --help        show this help message and exit\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003emultiple\u003c/b\u003e\u003c/summary\u003e\n\nОпределяет, может ли аргумент принимать множественные значения, или нет. По умолчанию `false`. Пример:\n\n```yaml\n  arg:\n    multiple: true\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003ereplacer\u003c/b\u003e\u003c/summary\u003e\n\nСодержит строку, котороя будет заменятья в коде скрипта (ключ `script`) на значение аргумента. Не самое элегантное решение, но позволяет творить интересные трюки в комбинации с `mode: format`.\n\nРеплейсеры в коде скрипта заменяются в том порядке, в каком описаны ключи в `arguments`. После аргументов в код подставляются значения `file_[NUMBER]`, если они есть.\n\nЕсли ключ отсутвует либо пуст, то реплейсер принимает значение `#[ARGUMENT NAME]#`\n\nПример реплейсеров и скрипта:\n\n```yaml\narguments:\n  arg:\n    replacer: -+PLACEHOLDER+-\nscript: \u003e-\n  cat -+PLACEHOLDER+- | ncat 127.0.0.1 9090\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eregex\u003c/b\u003e\u003c/summary\u003e\n\nПозволяет задать регулярное выражение, с помощью которого будут проверяться значения аргумента. Не прошедие проверку значения будут вызывать ошибку и не позволять запустить скрипт. Для проверки используется функция `re.fullmatch`\n\nПример:\n\n```yaml\narguments:\n  ip:\n    regex: \u003e-\n      ((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])\n\nscript: 'echo #ip# is ok'\n```\n\nРеакция скрипта на ввод:\n\n```\n$ bashmator use ip 77.88.55.60\n77.88.55.60 is ok\n\n$ bashmator use ip 77.88.55.601\nip: error: argument 'ip': invalid value '77.88.55.601'\n```\n\n\u003c/details\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003emode\u003c/b\u003e\u003c/summary\u003e\n\nИспользуется для модификации значений аргументов. Общий вид:\n\n```yaml\nmode:\n  readfile:\n    - arg2\n  replace:\n    arg3:\n      v1: value1\n      v2: value2\n  loop: arg1\n  format: \n    arg2: '{0!r}'\n  join:\n    arg2: ','\n    arg3: ';'\n  pformat:\n    arg2: ' [ {} ] '\n```\n\nКлючи mode:\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003ereadfile\u003c/b\u003e\u003c/summary\u003e\n\nСодержит список имен аргументов, которые будут интерпритированы как имена файлов.\n\nДанные файлы будут читаться построчно, а считанные строки будут подставляться в скрипт на место реплейсера.\n\nЕсли файла не существует, то будет подставлено входящиее значение аргумента.\n\nПример:\n\n```yaml\nshell: bash\narguments:\n  arg1:\n    description: test\nmode:\n  readfile:\n    - arg1\nscript: \u003e-\n  echo #arg1#\n```\n\nСодержимое файла `some_file.txt`:\n\n```\none\ntwo\nthree\n```\n\nЕсли запустить скрипт с аргументом `./some_file.txt`, то для исполнения будет сформирован следующий код:\n\n```bash\necho one two three\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003ereplace\u003c/b\u003e\u003c/summary\u003e\n\nПодзволяет заменять значения аргументов. Содержит в себе имена аргументов в качестве ключей, которые в свою очередь содержат замены в виде `ключ:значение`.\n\nПример:\n\n```yaml\nshell: bash\narguments:\n  arg1:\n    default:\n      - A\n      - B\n      - C\nmode:\n  replace:\n    arg1:\n      A: One\n      B: Two\nscript: \u003e-\n  echo #arg1#\n```\n\nВ данном примере, когда на вход скрпта в аргумент `--arg1` будет подаваться значение `A`, в скрипт будет подставлено значение `One`, а когда `B` - `Two`. Значение `C` заменено не будет и попадет в скрипт напрямую.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eloop\u003c/b\u003e\u003c/summary\u003e\n\nЕсли содержит имя множественного аргумента (`multiply: true`), то скрипт будет запускаться отдельно для каждого его значения. По умолчанию этого не происходит.\n\nПример:\n\n```yaml\nshell: bash\narguments:\n  arg1:\n    multiple: true\nmode:\n  loop: arg1\nscript: \u003e-\n  echo -n #arg1#; echo ' end'\n```\n\nРезультат выполнения скрипта c аргументами `1 2 3 4 5`:\n\n```\n1 end\n2 end\n3 end\n4 end\n5 end\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eformat\u003c/b\u003e\u003c/summary\u003e\n\nСодержит имена аргументов в качестве ключей и шаблоны python функции `.format()` в качестве значений. Если значение аргумента пусто, то форматирование не происходит и соответсвующий реплейсер удаляется из скрипта.\n\nДля множественных аргументов форматирование производится для каждого из значений отдельно. Операция `join` всегда происходит после.\n\nОбычно этот ключ применяется для правильной подстановки неоднозначных значений с использованием шаблона `{0!r}`, однако в комбинации с пустыми по умолчанию аргументами может позволить опционально вставлять в скрипт дополнительные куски.\n\nПример:\n\n```yaml\nshell: bash\narguments:\n  arg1:\n    default:\n      -\n  arg2:\n    multiple: true\nmode:\n  format:\n    arg1: \u003e-\n      | tee {0!r}\n    arg2: \u003e-\n      {0!r}\nscript: \u003e-\n  echo #arg1# #arg2#\n```\n\nЕсли запустить скрипт с аргументами `a d c r t`, для исполнения будет сформирован следующий код:\n\n```bash\necho 'a' 'd' 'c' 'r' 't' \n```\n\nЕсли с аргументами `--arg1 ./file.txt a d c r t`:\n\n```bash\necho 'a' 'd' 'c' 'r' 't' | tee './test.txt'\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003ejoin\u003c/b\u003e\u003c/summary\u003e\n\nСодержит имена множественных аргументов (`multiply: true`) в качестве ключей и строки-разделители для объединения в качестве значений. По умолчанию объединение значений множественных аргументов происходит через пробел.\n\nПример:\n\n```yaml\n  join:\n    arg1: ','\n```\n\nВ этом случае значения множественного аргумента `arg1` будут подставлены в скрипт в виде следующей строки:\n\n```\nval1,val2,val3,val4\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003epformat\u003c/b\u003e\u003c/summary\u003e\n\nТоже что и `format`, но отрабатывает после всех других модов. Полезен при обработке множественных аргументов без режима `loop`, позволяя дополнительно форматировать собранную с помощью `format` и `join` строку перед вставкой в код скрипта.\n\n\u003c/details\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eshell\u003c/b\u003e\u003c/summary\u003e\n\nВ данном ключе указывается короткое имя оболочки, используемой для запуска скрипта, либо путь до неё.\n\nВ целях улучшения совместимости рекомендуется добавлять оболочки в bashmator с помощью `bashmator shell add`, а в ключе `shell` указывать их короткие имена.\n\nДанный ключ обязателен, если отсутствуют ключи `item_[NUMBER]`, либо для каждого из них не заданы `shell` отдельно.\n\nПример:\n\n```yaml\nshell: bash\n```\n\nЭто тоже сработает, но так делать не рекомендуется:\n\n```yaml\nshell: /usr/bin/bash\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003escript\u003c/b\u003e\u003c/summary\u003e\n\nСодержит непосредственно код скрипта, который будет исполняться. _Не забудьте вставить реплейсеры аргументов!_\n\nЧтобы записывать многострочные скрипты используйте `|-`. Чтобы записать однострочник, но в коде использовать перенос строки, используйте `\u003e-`\n\nПример 1:\n\n```yaml\nscript: |-\n  ls -la\n  rm -r ./\n```\n\nПример 2:\n\n```yaml\nscript: \u003e-\n  ls -la;\n  rm -r ./\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003efile_[NUMBER]\u003c/b\u003e\u003c/summary\u003e\n\nИспользуется для подстановки полных путей файлов из директории `files` библиотеки.\n\n`replacer` по умолчанию: `#file_[NUMBER]#`\n\nОбщий вид:\n\n```yaml\nfile_1:\n  description: My Wordlist\n  path: dicts/my_wordlist.txt\nfile_2:\n  description: My Big Script\n  path: scripts/big_script.sh\n  replacer: __BIG_SCRIPT__\n  quote:\n    - '\"'\n    - '\\'\n```\n\nКлючи file_\\[NUMBER\\]:\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003epath\u003c/b\u003e\u003c/summary\u003e\n\n\u003e⚠️ __Обязательный ключ__\n\nСодержит путь до файла в библиотеке относительно директории `files`. Используйте `/` для перехода в директорию независимо от системы (windows, linux). Пример:\n\n```yaml\nfile_1:\n  path: lorem/lorem.txt\n```\nТак же можно обращаться к файлам по полному пути и использовать возвраты в родительскую директорию, но этого делать не рекомендуется. Скорее всего я закрою эту возможность спустя какое-то время, так как это больше баг, чем фитча 🥲.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003ereplacer\u003c/b\u003e\u003c/summary\u003e\n\nРаботает аналогично ключу `replacer` для `arguments`, но не подвергается форматированию.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003edescription\u003c/b\u003e\u003c/summary\u003e\n\nСодержит краткое описание файла, которое будет выведено при вызове помощи `use \u003cscript name\u003e -h` или `use \u003cscript name\u003e --help`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003equote\u003c/b\u003e\u003c/summary\u003e\n\nПри наличии использует первый символ из списка для заковычивания пути, а второй - для экранирования аналогичного символа, если он в изначальном пути содержится.\n\nПример:\n```yaml\nfile_1:\n  path: \"lorem folder/lorem'.txt\"\n  quote:\n    - \"'\"\n    - '\\'\n```\n\nПри выполнении подставит следующую строку:\n```\n'/\u003clibrary path\u003e/lorem folder/lorem\\'.txt'\n```\n\n\n\u003c/details\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eitem_[NUMBER]\u003c/b\u003e\u003c/summary\u003e\n\nИспользуется для добавления дополнительных скриптов в один модуль. Это удобно, когда разные скрипты принимают на вход одни и те же аргументы и объеденены общим смыслом.\n\nЕсли существуют `item`, то в CLI добавляется опция `--item`, которая позволяет вызывать подскрипты по номеру. Для массового запуска можно использовать последовательности: `--item 1,2,4-6`.\n\nЕсли вместе с `item` существует основной `script`, то ему будет присвоен номер `0`. Запускаться по умолчанию будет только он.\n\nОбщий вид:\n\n```yaml\nitem_1:\n  description: script 1\n  shell: python3\n  script: |-\n    print(1+2)\nitem_2:\n  description: script 2\n  mode:\n    loop: arg1\n  script: echo _ARG1_\n```\n\nКлючи item_\\[NUMBER\\]:\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003eshell\u003c/b\u003e\u003c/summary\u003e\n\nРаботает аналогично ключу `shell` в корне. Если ключ отсутствует, item будет использовать значение главного `shell`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003emode\u003c/b\u003e\u003c/summary\u003e\n\nРаботает аналогично ключу `mode` в корне. Используется для изменения главных параметров форматирования для `item`. \n\nЧтобы отметить действие `loop` главного `mode`, оставьте ключ пустым. Например:\n\n```yaml\nitem_2:\n  script: echo _A_\n  mode:\n    loop:\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003edescription\u003c/b\u003e\u003c/summary\u003e\n\nСодержит краткое описание назначения `item`, которое будет выведено при вызове помощи `use \u003cscript name\u003e -h` или `use \u003cscript name\u003e --help`.\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003cb\u003escript\u003c/b\u003e\u003c/summary\u003e\n\n\u003e⚠️ __Обязательный ключ__\n\nРаботает аналогично главному `script`.\n\n\u003c/details\u003e\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n\u003c/details\u003e\n\n\nПримеры YAML модулей представлены во [встроенной библиотеке](https://github.com/vinzekatze/bashmator/tree/main/bshm/library/modules/examples):\n\n```\n$ bashmator search examples\nSearch results:\n\n script name                  | status   | tags\n------------------------------+----------+-----------------------------\n examples/args/choice         | OK       | help, manual, arguments\n examples/args/choice_default | OK       | help, manual, arguments\n examples/args/default        | OK       | help, manual, arguments\n examples/args/default_empty  | OK       | help, manual, arguments\n examples/args/flag           | OK       | help, manual, arguments\n examples/args/metavar        | OK       | help, manual, arguments\n examples/args/multiple       | OK       | help, manual, arguments\n examples/args/regex          | OK       | help, manual, arguments\n examples/args/replacer       | OK       | help, manual, arguments\n examples/args/simple         | OK       | help, manual, arguments\n examples/files/replacer      | OK       | help, manual, files\n examples/files/simple        | OK       | help, manual, files\n examples/items/default       | OK       | help, manual, items\n examples/items/mode          | OK       | help, manual, items\n examples/items/shell         | OK       | help, manual, items\n examples/items/simple        | OK       | help, manual, items\n examples/minimal             | OK       |\n examples/mode/format         | OK       | help, manual, mode\n examples/mode/format_empty   | OK       | help, manual, mode\n examples/mode/join           | OK       | help, manual, mode\n examples/mode/loop           | OK       | help, manual, mode\n examples/mode/pformat        | OK       | help, manual, mode\n examples/mode/readfile       | OK       | help, manual, mode\n examples/mode/replace        | OK       | help, manual, mode\n examples/simple              | OK       | help, manual, informational\n```\n\n# Пример работы\nНиже представлен пример запуска скрипта [examples/args/simple](https://github.com/vinzekatze/bashmator/blob/main/bshm/library/modules/examples/simple.yaml):\n\n\u003cdetails\u003e\n  \u003csummary\u003eАргументы командной строки, сгенерированные из YAML\u003c/summary\u003e\n  \n```console\n$ bashmator use examples/args/simple -h\nusage: examples/args/simple [-h] arg\n\nExample of a simple required argument\n\n.................................................................\n\npositional arguments:\n  arg         random string\n\noptions:\n  -h, --help  show this help message and exit\n\nShell:   bash \nAuthor:  demo \nTags:    help, manual, arguments      \n```\n  \n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eЗапуск скрипта с включенной опцией логирования\u003c/summary\u003e\n  \n```console\n$ bashmator use -o example.log examples/args/simple blablabla\nInput: blablabla\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003eСодержимое записанного файла \u003ccode\u003eexample.log\u003c/code\u003e\u003c/summary\u003e\n\n```console\n$ cat example.log \n+-------------------------------------------------------------------------------\n+ Generated by bashmator 1.1.1\n+-------------------------------------------------------------------------------\n+ Script name:               examples/args/simple (0)\n+ Start time:                2023-06-29 16:11:25 (UTC)\n+ Shell:                     /usr/bin/bash -c\n+-------------------------------------------------------------------------------\n+ Running code\n+-------------------------------------------------------------------------------\n\necho 'Input: blablabla'\n\n+-------------------------------------------------------------------------------\n+ Log\n+-------------------------------------------------------------------------------\n\nInput: blablabla\n\n+-------------------------------------------------------------------------------\n+ End time:                  2023-06-29 16:11:25 (UTC)\n+-------------------------------------------------------------------------------\n\n```\n\n\u003c/details\u003e\n\n# Доступные библиотеки\nОбщего назначения для kali linux:\n- [ktz-autokali](https://github.com/vinzekatze/ktz-autokali)\n- [toolscape](https://github.com/Kraus17th/toolscape) by [Kraus17th](https://github.com/Kraus17th)\n\nТестирование WiFi для kali linux на Raspberry Pi 4:\n- [wless-gun](https://github.com/vinzekatze/wless-gun)","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinzekatze%2Fbashmator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvinzekatze%2Fbashmator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinzekatze%2Fbashmator/lists"}