[Перевод] Релиз Bun Shell

b3d1cad1d704f323ab1960ccf14dfd9c.png

JavaScript — самый популярный скриптовый язык в мире.

Так почему же так сложно запускать shell-скрипты на JavaScript?

import { spawnSync } from "child_process";

// this is a lot more work than it could be
const { status, stdout, stderr } = spawnSync("ls", ["-l", "*.js"], {
  encoding: "utf8",
});

Также можно использовать Node.js API, чтобы сделать что-то подобное:

import { readdir } from "fs/promises";

(await readdir(".", { withFileTypes: true })).filter((a) =>
  a.name.endsWith(".js")
);

Но это все еще не так просто, как shell:

ls *.js

Почему существующие shell-оболочки не работают в JavaScript

bashили shсуществуют уже несколько десятилетий.

Shell — это решенная проблема!

Комментатор Hacker New, возможно.

Но они плохо работают в JavaScript. Почему?

macOS (zsh), Linux (bash) и Windows (cmd) имеют немного разные оболочки с разным синтаксисом и разными командами. Команды, доступные на каждой платформе, разные, и даже одна и та же команда может иметь разные флаги и поведение.

На сегодняшний день решение npm заключается в том, чтобы положиться на сообщество, которое дополнит недостающие команды реализациями JavaScript.

rm -rf не работает в Windows

rimraf — кроссплатформенная реализация JavaScript rm -rf — загружается более 60 миллионов раз в неделю:

1582f39533ce05d2f354f0331221e265.png

Переменные среды, например, FOO=bar