1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/leizongmin-jssh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

JSSH — это мощный инструмент командной строки, написанный на JavaScript.

Особенности:

  • JSSH использует движок QuickJS и поддерживает функции языка ES2020.
  • Для выполнения скрипта нужен только бинарный файл размером около 10 МБ, без необходимости установки дополнительных зависимостей.
  • Стандартная библиотека включает основные операции с файлами, выполнение системных команд, работу с SSH для удалённого управления, HTTP, Socket, анализ параметров командной строки и логирование. Это покрывает большинство потребностей инструментов командной строки.
  • Все операции являются блокирующими функциями, что упрощает написание кода.
  • Потребление памяти и скорость запуска (около 10 мс) минимальны.

Установка:

  • Можно установить предварительно собранные версии для Linux amd64, macOS amd64 и Windows amd64 с сайта Releases.
  • Другие системы могут установить последнюю версию через Go:
    GOPROXY=https://goproxy.cn go get -u github.com/leizongmin/jssh
    Для удаления JSSH просто удалите бинарный файл.

Использование инструмента командной строки:

  • Выполнение скрипта: jssh file.js.
  • Вход в REPL: jssh repl.
  • Выполнение кода из командной строки: jssh exec "js code".
  • Выполнение кода с выводом результата в виде строки: jssh eval "js code".
  • Компиляция JS-кода в исполняемый файл: jssh build file.js.
  • Просмотр справки: jssh help.

Глобальная конфигурация:

  • История REPL по умолчанию хранится в файле ~/.jssh_history. Её можно изменить с помощью переменной среды JSSH_HISTORY.
  • При запуске JSSH пытается загрузить файлы ~/.jssh_global.js и все файлы .js в каталоге ~/.jssh_global.d и выполнить их. Эту функцию можно отключить с помощью переменной окружения JSSH_GLOBAL.

Примеры использования:

  • Пример сборки скрипта: jssh/build.js.
  • Реализация игрушечного Docker: toy-docker.

Документация:

  • В качестве справки можно использовать файл определения типов TypeScript jssh.d.ts. Его можно импортировать в редактор для получения поддержки автоподсказок кода.

В JSSH также есть список глобальных переменных и функций, которые можно использовать при работе с инструментом. Пароль, по умолчанию пустой;

Путь к файлу с приватным ключом, по умолчанию ~/.ssh/id_rsa;

Время ожидания соединения в миллисекундах, по умолчанию 60000;

ssh.open(host) — установить соединение с указанным хостом;

ssh.close() — закрыть соединение;

ssh.setenv(name, value) — задать значение переменной окружения;

ssh.exec(cmd, env?, mode?) — выполнить команду;

ssh.exec1(cmd, env?) — выполнить команду, mode=1;

ssh.exec2(cmd, env?) — выполнить команду, mode=2;

Операции с файлами

fs.readdir(dir) — получить список файлов в указанном каталоге;

fs.readfile(filename) — прочитать содержимое файла;

fs.readfilebytes(filename) — считать содержимое файла и вернуть его в виде массива Uint8Array;

fs.stat(filepath) — получить информацию о файле;

fs.exist(filepath) — проверить наличие файла;

fs.writefile(filename, data) — перезаписать файл, data может быть строкой или массивом Uint8Array;

fs.appendfile(filename, data) — добавить данные в конец файла, data может быть строкой или массивом Uint8Array;

Работа с путями

path.join(...paths) — объединить несколько подпутей;

path.abs(filepath) — получить абсолютный путь;

path.base(filepath) — извлечь имя файла;

path.ext(filename) — извлечь расширение файла;

path.dir(filepath) — извлечь каталог, в котором находится файл;

Обработка аргументов командной строки

cli.get(flagname) — получить значение указанного аргумента командной строки, поддерживаются форматы -name=value и --name=value;

cli.get(index) — получить указанный аргумент командной строки по индексу, начиная с 0;

cli.bool(flagname) — определить логическое значение указанного аргумента командной строки: если это -name=0, -name=false, -name=f или аргумент отсутствует, то результат будет false;

cli.args() — получить все аргументы командной строки;

cli.opts() — получить все опции командной строки;

cli.prompt(message?) — запросить ввод данных у пользователя, ввод завершается нажатием клавиши [Enter];

cli.subcommand(name, callback) — зарегистрировать функцию обработки для подкоманды, если *name=**, то это означает другую ситуацию;

cli.subcommandstart() — начать обработку подкоманды;

HTTP-операции

http.timeout(ms) — установить время ожидания операции в миллисекундах, по умолчанию 60000;

http.request(method, url, headers?, body?) — отправить HTTP-запрос;

http.download(url, filename?) — загрузить файл через HTTP;

Логирование

Уровень логирования можно настроить с помощью переменной среды JSSH_LOG=<DEBUG|INFO|ERROR>, по умолчанию JSS_LOG=INFO.

log.debug(template, ...args) — вывести отладочную информацию (зелёный текст), формат аналогичен функции format();

log.info(template, ...args) — вывести информационную информацию (зелёный текст), формат аналогичен функции format();

log.warn(template, ...args) — вывести предупреждающую информацию (жёлтый текст), формат аналогичен функции format();

log.error(template, ...args) — вывести информацию об ошибке (красный текст), формат аналогичен функции format();

log.fatal(template, ...args) — вывести фатальную информацию (красный текст) и завершить процесс, формат аналогичен функции format();

Сетевые подключения

socket.timeout(ms) — установить время ожидания операции в миллисекундах, по умолчанию 60000;

socket.tcpsend(host, port, data) — отправить данные на указанный порт хоста и получить результат;

socket.tcptest(host, port) — протестировать доступность порта на указанном хосте;

Утверждения и тестирование

assert(ok, message?) — простое утверждение;

Разработка

Для сборки проекта выполните следующую команду:

./build.js

Благодарности

  • Спасибо компании JetBrains за предоставление бесплатного инструмента разработки Goland;
  • Спасибо bellard за разработку движка QuickJS;

Лицензия

MIT License

Copyright (c) 2020-2021 Zongmin Lei <leizongmin@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Это мощный инструмент, созданный с использованием JS, для написания небольших утилит командной строки. Развернуть Свернуть
Go и 2 других языков
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/leizongmin-jssh.git
git@api.gitlife.ru:oschina-mirror/leizongmin-jssh.git
oschina-mirror
leizongmin-jssh
leizongmin-jssh
main