[Open source, JavaScript, Программирование, Серверное администрирование] zx – bash скрипты на javascript
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Bash широко используется в программировании и является превосходным инструментом, но и у него есть свои недостатки. Поэтому Google разработал пакет zx, который позволяет использовать bash внутри javascript / typescript и имеет около 17к звёзд на github. В данной статье будут рассмотрены плюсы и минусы библиотеки, главные аспекты использования и примеры работы.
Стандартная библиотека Node.js предосталяет возможность написания bash скриптов, но zx справляется с этим намного лучше. Пакет реализовывает удобные асинхронные оболочки над child_procces, позволяет не использовать множество аргуметов, а также представляет основные команды bash, такие как cd, pwd и т.п, из коробки.
Фичи
- Все функции ($, cd, fetch и т.д.) доступны сразу без какого-либо импорта.
- Выполнение команды возвращает ProcessPromise<T>
- Поддержка Node.js streams
- Использование require() в ESM модулях
- Автоматическое экранирование данных массива, переданных в команду
- Выполнение markdawn файлов
- Выполнение скриптов по http
Применение
Для успешной работы следует описать скрипт в ESM модуле. Это необходимо, чтобы использовать оператор await сразу на выполняемой команде. Если необходимо использовать обычный .js/.ts файл, то нужно обернуть функции в void async function () {...}().
В первой строке файла необходимо добавить:
#!/usr/bin/env zx
Для запуска можно использовать как bash:
chmod +x ./script.mjs
./script.mjs
Так и zx:
zx ./script.mjs
Чтобы изменить облочку, в которой должен выполняться скрипт, нужно использовать команду $.shell:
$.shell = '/usr/bin/zsh'
Помимо использования стандартных bash команд с помощью zx можно писать и свои. Для этого следует использовать обёртку вида await $`command`, которая выполняет описанную команду. При нулевом коде завершения программы возвращается объект ProcessPromise<T>, который имеет следующую структуру:
class ProcessPromise<T> extends Promise<T> {
readonly stdin: Writable
readonly stdout: Readable
readonly stderr: Readable
readonly exitCode: Promise<number>
pipe(dest): ProcessPromise<T>
}
При другом любом другом коде завершения выбрасывается исключение ProcessOutput, которое имеет следующую структуру:
class ProcessOutput {
readonly stdout: string
readonly stderr: string
readonly exitCode: number
toString(): string
}
В случае, когда нужно узнать, какой код возвращает определённая команда, можно применить функцию notthrow(), использование которой предотвращает выбрасывание исключения и возвращает ProcessPromise<T>.
Используемые пакеты
В zx включено несколько пакетов, которые доступны без импорта. Один из них – chalk, он может быть применён для настройки стилей вывода текста в терминал. Пример использования:
console.log(chalk.purple('Hello world!'))
Ещё включён пакет fs для работы с файловой системой.
let greetingMessage = await fs.readFile('./greetings.txt')
Пакет os обеспечивает работу с операционной системой.
await $`cd ${os.homedir()} && touch Documents/page1.txt`
Сравнение с аналогами
Существует проект shellpy, который реализовывает работу с bash из python, но, к сожалению, так и не вышла stable версия, поэтому использовать его в продакшене — не лучшая идея. Существует возможность использования subprocess в python, но это затратно по времени и не предоставляет настолько же удобной работы, как zx.
В java тоже есть возможность работы с shell, но нет обёртки над основными командами, поэтому всю логику приходится реализовывать с помощью средств языка, что уже не является основной целью данной статьи.
Кроме этого существует много языков, в которых можно работать с bash, но на их описание уйдёт крайне много времени.
Вывод
zx — мощная библиотека для работы с bash из javascript. Проект развивается и поддерживается Google. В нём уже реализованы основные функции, которые можно легко и быстро использовать без самописных обёрток. Ко всему этому все процессы выполняются асинхронно, что в большинстве случаев улучшает производительность. А сама возможность использования bash в высокоуровневом языке программирования позволяет с лёгкостью писать скрипты для автоматизации процессов в ОС.
На правах рекламы
Облачный хостинг для бизнеса и любых крупных проектов — максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe, надёжные дата-центры, защита от DDoS-атак «из коробки», активация любого сервера в течение минуты!
Подписывайтесь на наш чат в Telegram.
оригинал
===========
Источник:
habr.com
===========
Похожие новости:
- [Серверное администрирование, DNS, Законодательство в IT, Копирайт, Звук] Суд дал Sony право заставлять Quad9 блокировать пиратские сайты на уровне DNS
- [Python, Программирование, Гаджеты, История IT] Декодирование сигнала с видеофона 1988 года выпуска (перевод)
- [Python, Программирование, Математика] Наглядно о том, как работает NumPy (перевод)
- [Информационная безопасность, Разработка веб-сайтов, Реверс-инжиниринг] Промокоды, случайно оставленные в исходном коде веб-сайта (перевод)
- [Open source, Python, Программирование, Учебный процесс в IT, Криптовалюты] Андрей Карпати: Bitcoin на Python (часть 1) (перевод)
- [Программирование, C++, Разработка под Linux] Интеграция пресетов CMake в Visual Studio и Visual Studio Code (перевод)
- [Разработка веб-сайтов, NoSQL, ReactJS, Serverless] You don't know Redis
- [Python, Программирование, Алгоритмы] Новый выпуск «Скринкастов» вместе с MADE: много Python'а
- [Open source, Python, Программирование, Машинное обучение] ABBYY NeoML 2.0: Python и многое другое
- [Информационная безопасность, Карьера в IT-индустрии] Как киберпреступные группы нанимают сотрудников (перевод)
Теги для поиска: #_open_source, #_javascript, #_programmirovanie (Программирование), #_servernoe_administrirovanie (Серверное администрирование), #_bash, #_javascript, #_zx, #_blog_kompanii_vdsina.ru (
Блог компании VDSina.ru
), #_open_source, #_javascript, #_programmirovanie (
Программирование
), #_servernoe_administrirovanie (
Серверное администрирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:00
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Bash широко используется в программировании и является превосходным инструментом, но и у него есть свои недостатки. Поэтому Google разработал пакет zx, который позволяет использовать bash внутри javascript / typescript и имеет около 17к звёзд на github. В данной статье будут рассмотрены плюсы и минусы библиотеки, главные аспекты использования и примеры работы. Стандартная библиотека Node.js предосталяет возможность написания bash скриптов, но zx справляется с этим намного лучше. Пакет реализовывает удобные асинхронные оболочки над child_procces, позволяет не использовать множество аргуметов, а также представляет основные команды bash, такие как cd, pwd и т.п, из коробки. Фичи
Применение Для успешной работы следует описать скрипт в ESM модуле. Это необходимо, чтобы использовать оператор await сразу на выполняемой команде. Если необходимо использовать обычный .js/.ts файл, то нужно обернуть функции в void async function () {...}(). В первой строке файла необходимо добавить: #!/usr/bin/env zx
Для запуска можно использовать как bash: chmod +x ./script.mjs
./script.mjs Так и zx: zx ./script.mjs
Чтобы изменить облочку, в которой должен выполняться скрипт, нужно использовать команду $.shell: $.shell = '/usr/bin/zsh'
Помимо использования стандартных bash команд с помощью zx можно писать и свои. Для этого следует использовать обёртку вида await $`command`, которая выполняет описанную команду. При нулевом коде завершения программы возвращается объект ProcessPromise<T>, который имеет следующую структуру: class ProcessPromise<T> extends Promise<T> {
readonly stdin: Writable readonly stdout: Readable readonly stderr: Readable readonly exitCode: Promise<number> pipe(dest): ProcessPromise<T> } При другом любом другом коде завершения выбрасывается исключение ProcessOutput, которое имеет следующую структуру: class ProcessOutput {
readonly stdout: string readonly stderr: string readonly exitCode: number toString(): string } В случае, когда нужно узнать, какой код возвращает определённая команда, можно применить функцию notthrow(), использование которой предотвращает выбрасывание исключения и возвращает ProcessPromise<T>. Используемые пакеты В zx включено несколько пакетов, которые доступны без импорта. Один из них – chalk, он может быть применён для настройки стилей вывода текста в терминал. Пример использования: console.log(chalk.purple('Hello world!'))
Ещё включён пакет fs для работы с файловой системой. let greetingMessage = await fs.readFile('./greetings.txt')
Пакет os обеспечивает работу с операционной системой. await $`cd ${os.homedir()} && touch Documents/page1.txt`
Сравнение с аналогами Существует проект shellpy, который реализовывает работу с bash из python, но, к сожалению, так и не вышла stable версия, поэтому использовать его в продакшене — не лучшая идея. Существует возможность использования subprocess в python, но это затратно по времени и не предоставляет настолько же удобной работы, как zx. В java тоже есть возможность работы с shell, но нет обёртки над основными командами, поэтому всю логику приходится реализовывать с помощью средств языка, что уже не является основной целью данной статьи. Кроме этого существует много языков, в которых можно работать с bash, но на их описание уйдёт крайне много времени. Вывод zx — мощная библиотека для работы с bash из javascript. Проект развивается и поддерживается Google. В нём уже реализованы основные функции, которые можно легко и быстро использовать без самописных обёрток. Ко всему этому все процессы выполняются асинхронно, что в большинстве случаев улучшает производительность. А сама возможность использования bash в высокоуровневом языке программирования позволяет с лёгкостью писать скрипты для автоматизации процессов в ОС. На правах рекламы Облачный хостинг для бизнеса и любых крупных проектов — максимальная конфигурация — 128 ядер CPU, 512 ГБ RAM, 4000 ГБ NVMe, надёжные дата-центры, защита от DDoS-атак «из коробки», активация любого сервера в течение минуты! Подписывайтесь на наш чат в Telegram. оригинал =========== Источник: habr.com =========== Похожие новости:
Блог компании VDSina.ru ), #_open_source, #_javascript, #_programmirovanie ( Программирование ), #_servernoe_administrirovanie ( Серверное администрирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 08:00
Часовой пояс: UTC + 5