Для пользователя Linux командная строка Windows кажется чем-то непривычным и неудобным. С появлением WSL казалось, что проблема использования Bash решена, но запуск виртуальной машины требует времени, да и пути в WSL отличаются от Windows. Плюс скорость файловых операций на виртуальной машине хуже.

Ещё есть возможность использовать Bash через MSYS2, но мне хотелось найти что-то более компактное и легковесное, а также простое в настройке и установке.

Так как я часто использовал Linux на роутерах, то познакомился с BusyBox, набор UNIX-утилит командной строки, используемой в качестве основного интерфейса во встраиваемых операционных системах. Оказалось, есть версия BusyBox для Windows. В 2020 году появился Windows Terminal, а в нем есть возможность создавать вкладку с запуском конкретной программы.

Пример вкладки Bash
Пример вкладки Bash

Сложив эти два факта, пришла очевидная мысль, использовать BusyBox, содержащий в себе Bash, в Windows Terminal как отдельную консоль.

Список программ входящих в BusyBox
Список программ входящих в BusyBox

Для этого необходимо скачать BusyBox 64, и я, например положил файл в C:/Program Files/Busybox. А дальше создать новый профиль Windows Terminal и поменять его имя на Bash и указать команду для запуска как C:/Program Files/Busybox/busybox64.exe bash

Профиль для Bash
Профиль для Bash

У этого подхода был один минус, при запуске терминала не из конкретной папки, а из ярлыка на рабочем столе или из панели задач.

Запуск терминала из конкретной папки
Запуск терминала из конкретной папки

То адрес рабочей папки был C:/Windows/System32, и если случайно ввести команду удаления или создания файла, то мы портим важную системную папку. Обойти возможно используя аналог .bashrc или /etc/profile или .profile.

Но просто создать файл .profile мало, BusyBox для Windows их не считывает, для этого необходимо добавить путь к этому файлу в  ENV в “Переменные среды”.

Теперь мы можем написать скрипт, который будет настраивать рабочую директорию при запуске консоли.

#!/bin/bash

if [ "$PWD" = "C:/Windows/System32" ]; then
    cd $HOME
fi

Теперь если мы запустили терминал из ярлыка или панели задач, то рабочей директорией по умолчанию становится домашняя папка пользователя, а если мы запускаем из конкретной папки то, она и становится рабочей директорией.

Мы получили Bash в Windows Terminal с удобной начальной директорией.

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


  1. pae174
    27.07.2023 20:39
    +8

    Busybox это набор самых базовых утилит. Если хочется, так сказать, полного погружения в тему, то надо смотреть в сторону CygWin .


    1. unreal_undead2
      27.07.2023 20:39

      cygwin - это POSIX поверх Win32 со своими артефактами, система в системе. Если хочется просто писать unix-way скрипты, запускающие виндовые программы, busybox вполне себе вариант.


    1. domix32
      27.07.2023 20:39
      +1

      Уж лучше WSL


  1. kt97679
    27.07.2023 20:39
    +3

    busybox не включает в себя bash, это видно даже на вашем скриншоте со списком всех команд, которые поддерживает ваша сборка busybox


    1. pae174
      27.07.2023 20:39

      bash там есть, и на скриншоте он тоже есть.


      1. fshp
        27.07.2023 20:39
        +3

        Bash это отдельное приложение, не являющееся частью bb. В bb ash.

        Bash со скрина просто alias.


  1. radioxoma
    27.07.2023 20:39
    +2

    Для пользователя Linux командная строка Windows кажется чем-то непривычным и неудобным.

    Кто-то считает её удобной? cp866 передаёт привет!


    1. atshaman
      27.07.2023 20:39
      +2

      Use PowerShell, Luke!


  1. KReal
    27.07.2023 20:39
    +3

    Несколько наблюдений:


    • если возникает желание (и есть умение) использовать bash, то, возможно, WSL всё таки не самый плохой выбор: по личному опыту, у нас на виндовых машинах вся соответствующая разработка велась в WSL и это было очень удобно
    • если вы используете git в винде, то вроде бы автоматом прилетает gitbash
    • наверняка (но это не точно) есть какая-то приблуда для windows terminal


    1. ritorichesky_echpochmak
      27.07.2023 20:39

      Да, в WSL всё-таки сильно получше всё с софтом, тем более что по умолчанию там тащится всё от Ubuntu LTS, плюс те же докеры интегрируются в WSL, как и всякие IDE. Но нужно достаточно ОЗУ

      git в винде примечателен тем, что в этой сборке есть не только гит, но и, например, прекрасный tig, тогда как в никсах про него нужно отдельно узнать и поставить

      Самое пока непонятное остаётся как нормально запускать sh-скрипты прямо из виндового файлменеджера, т.к. нужно на бегу подменять пути


      1. karen07 Автор
        27.07.2023 20:39

        По картинкам видно, WSL у меня тоже стоит, и он используется когда BusyBox не справляется, тут получается удобный симбиоз. Чтобы просто грепнуть файлы в папке или файнд то идти в WSL не очень нужно.


        1. ritorichesky_echpochmak
          27.07.2023 20:39

          Я случайно нашёл ripgrep, он есть нативный и довольно быстр. Но чаще возможностей поиска в тотале более чем хватает. Другие базовые штуки тоже можно поискать, есть ли порт, который можно положить один раз в C:\bin и прописать в PATH глобально.

          Заморачиваться каждый раз гадая в какой консоли что не взлетит ужасно устал. Хватает даже с "родным" для винды повершеллом проблем, когда некоторые вещи работают по разному в v5 и v7 (а ещё нужно вспомнить на бегу, кто из них pwsh, кто powershell). Поэтому по умолчанию всегда подразумеваю наиболее полную и актуальную среду. С unix-like подобиями для винды я намучился вдоволь когда не было нативно OpenSSH и приходилось страдать с Bitwise, cygwin и прочими... и у каждого из них был "свой неповторимый путь" страданий (особенно с путями к дискам и домашней директории) и багов. Есть возможность работать с практически полноценным дистрибутивом - не вижу причин отказываться


          1. mayorovp
            27.07.2023 20:39

            А чего там страдать-то было? Putty же есть...


            1. ritorichesky_echpochmak
              27.07.2023 20:39

              Это клиент, а мне нужен был сервер. К тому же у Putty свой формат ключей и прочие костылики, тогда как штатный агент отлично работает даже на винде с ключами из KeePassXC, JB и прочими штуками. Putty хорош из винды в порты и телнет тыкаться, но для SSH родной клиент сильно приятнее


  1. mayorovp
    27.07.2023 20:39

    Теперь если мы запустили терминал из ярлыка или панели задач, то рабочей директорией по умолчанию становится домашняя папка пользователя

    А так сложно-то зачем? Неужели сменить рабочую директорию по умолчанию в ярлыке или там в настройках wt религия не позволяет?..


    1. karen07 Автор
      27.07.2023 20:39

      Если поменять папку по умолчанию, то исчезнет возможность открывать терминал в конкретной папке.


      1. mayorovp
        27.07.2023 20:39

        Ага, значит надо менять ярлык.


        1. dartraiden
          27.07.2023 20:39

          Ярлык не окажет влияния на запуск через Пуск → Выполнить. Вариант из статьи сложнее, но универсальный.


  1. quarus
    27.07.2023 20:39
    +1

    На Linux нет желания перейти?... и искать ничего не придётся. Создание Франкенштейна жизнеспособно только в фильмах.

    Не совсем понимаю необходимость подобного скрещивания... поясните, если не сложно.


    1. ritorichesky_echpochmak
      27.07.2023 20:39
      +2

      Например, дома и для петов во всю используешь СПО, но так уж сложилось, что сейчас тебе готовы хорошо платить именно за поддержку какого-нибудь легаси, которое прибито к форточке буквально одной проприетарной либой купленной лет 10 назад. Выдали ноут с фортками и копай... а ты всё равно хочешь иметь возможность использовать все эти привычные тёплые ламповые тулы, запускать всякие штуки типа lnav чтобы видеть сразу все логи (да, у него есть кривоватая сборка для винды, но она глючит)

      Ну или тот же докер, куча микросервисов, в линуксовой конфигурации 3Гб в ОЗУ, 2 на диске... переключаешь Docker Desktop на Windows Containers и потребление ОЗУ переваливает за 20Гб, а диска съедается более 60Гб, плюс проблемы с сетью при перезапуске ПК... isolation=process для актуальной десятки так и не завезли. Части образов для Windows нет в принципе в докерхабе, нужно самому собирать или брать какие-то сомнительные поделки...

      Из личного - очень страдаю без ShareX и TotalCommander (doublecmd не торт). Очень матерюсь, когда не нахожу тотал и вообще что-то кроме проводника на ПК других разработчиков, когда просят подойти помочь расковырять проблемку. В остальном вполне себе не вижу проблем работать в обеих ОС.

      А, ну и ещё у нас локально ГОСы упоролись и всякие налоговые, ФСЗН, некоторые банки, страховые - IE only... спустя полгода после принудительного убийства IE самими майками... Причём кто-то из них для ЭЦП всё ещё требует SSL3, другие не умеют в TLS1.2+


      1. dartraiden
        27.07.2023 20:39

        очень страдаю без ShareX

        Если не нужна запись видео, то Shutter вполне неплох.


    1. unreal_undead2
      27.07.2023 20:39

      Банально корпоративная почта/мессенджер проприетарные и под Windows, так что виндовый ноутбук нужен - и даже если основной девелопмент на линуксовых серверах, на ноуте образуются файлы которые иногда хочется грепнуть.


  1. Stanislavvv
    27.07.2023 20:39
    +1

    В busybox в лучшем случае posix shell (вот не знаю, насколько он posix), до баша ему далеко...


    1. unreal_undead2
      27.07.2023 20:39
      +1

      На простые вещи типа for i in `smth | grep нужное | grep -v ненужное`; do ... его вроде хватает.


      1. mayorovp
        27.07.2023 20:39
        +1

        Это и есть "в лучшем случае posix shell"


      1. Stanislavvv
        27.07.2023 20:39
        +1

        Верно. Но башем от этого он не становится. В случае, если захочется что-то более сложное (к примеру, переменные обрабатывать не через A=`echo $B | ....`, а средствами баша, см. https://tldp.org/LDP/abs/html/refcards.html#AEN22828), то уже хрен.


        1. unreal_undead2
          27.07.2023 20:39

          Понятно, что заголовок может ввести в заблуждение, но основной смысл всё таки в том, что если нужно пару раз в неделю сделать простенький find/grep, можно обойтись без WSL или cygwin.


  1. domix32
    27.07.2023 20:39
    +2

    Можно поставить git bash и bashиться через него. У него есть в том числе и автотрансляция слешей в путях и в терминал подключается и большая часть утилит вполне имеется. Ещё и env c основной системой делит.


  1. NutsUnderline
    27.07.2023 20:39

     создать новый профиль Windows Terminal 

    Вот тут надо чуть подробнее пояснить