Для пользователя Linux командная строка Windows кажется чем-то непривычным и неудобным. С появлением WSL казалось, что проблема использования Bash решена, но запуск виртуальной машины требует времени, да и пути в WSL отличаются от Windows. Плюс скорость файловых операций на виртуальной машине хуже.
Ещё есть возможность использовать Bash через MSYS2, но мне хотелось найти что-то более компактное и легковесное, а также простое в настройке и установке.
Так как я часто использовал Linux на роутерах, то познакомился с BusyBox, набор UNIX-утилит командной строки, используемой в качестве основного интерфейса во встраиваемых операционных системах. Оказалось, есть версия BusyBox для Windows. В 2020 году появился Windows Terminal, а в нем есть возможность создавать вкладку с запуском конкретной программы.
Сложив эти два факта, пришла очевидная мысль, использовать BusyBox, содержащий в себе Bash, в Windows Terminal как отдельную консоль.
Для этого необходимо скачать BusyBox 64, и я, например положил файл в C:/Program Files/Busybox
. А дальше создать новый профиль Windows Terminal и поменять его имя на Bash и указать команду для запуска как C:/Program Files/Busybox/busybox64.exe 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)
kt97679
27.07.2023 20:39+3busybox не включает в себя bash, это видно даже на вашем скриншоте со списком всех команд, которые поддерживает ваша сборка busybox
KReal
27.07.2023 20:39+3Несколько наблюдений:
- если возникает желание (и есть умение) использовать bash, то, возможно, WSL всё таки не самый плохой выбор: по личному опыту, у нас на виндовых машинах вся соответствующая разработка велась в WSL и это было очень удобно
- если вы используете git в винде, то вроде бы автоматом прилетает gitbash
- наверняка (но это не точно) есть какая-то приблуда для windows terminal
ritorichesky_echpochmak
27.07.2023 20:39Да, в WSL всё-таки сильно получше всё с софтом, тем более что по умолчанию там тащится всё от Ubuntu LTS, плюс те же докеры интегрируются в WSL, как и всякие IDE. Но нужно достаточно ОЗУ
git в винде примечателен тем, что в этой сборке есть не только гит, но и, например, прекрасный tig, тогда как в никсах про него нужно отдельно узнать и поставить
Самое пока непонятное остаётся как нормально запускать sh-скрипты прямо из виндового файлменеджера, т.к. нужно на бегу подменять пути
karen07 Автор
27.07.2023 20:39По картинкам видно, WSL у меня тоже стоит, и он используется когда BusyBox не справляется, тут получается удобный симбиоз. Чтобы просто грепнуть файлы в папке или файнд то идти в WSL не очень нужно.
ritorichesky_echpochmak
27.07.2023 20:39Я случайно нашёл ripgrep, он есть нативный и довольно быстр. Но чаще возможностей поиска в тотале более чем хватает. Другие базовые штуки тоже можно поискать, есть ли порт, который можно положить один раз в C:\bin и прописать в PATH глобально.
Заморачиваться каждый раз гадая в какой консоли что не взлетит ужасно устал. Хватает даже с "родным" для винды повершеллом проблем, когда некоторые вещи работают по разному в v5 и v7 (а ещё нужно вспомнить на бегу, кто из них pwsh, кто powershell). Поэтому по умолчанию всегда подразумеваю наиболее полную и актуальную среду. С unix-like подобиями для винды я намучился вдоволь когда не было нативно OpenSSH и приходилось страдать с Bitwise, cygwin и прочими... и у каждого из них был "свой неповторимый путь" страданий (особенно с путями к дискам и домашней директории) и багов. Есть возможность работать с практически полноценным дистрибутивом - не вижу причин отказываться
mayorovp
27.07.2023 20:39А чего там страдать-то было? Putty же есть...
ritorichesky_echpochmak
27.07.2023 20:39Это клиент, а мне нужен был сервер. К тому же у Putty свой формат ключей и прочие костылики, тогда как штатный агент отлично работает даже на винде с ключами из KeePassXC, JB и прочими штуками. Putty хорош из винды в порты и телнет тыкаться, но для SSH родной клиент сильно приятнее
mayorovp
27.07.2023 20:39Теперь если мы запустили терминал из ярлыка или панели задач, то рабочей директорией по умолчанию становится домашняя папка пользователя
А так сложно-то зачем? Неужели сменить рабочую директорию по умолчанию в ярлыке или там в настройках wt религия не позволяет?..
karen07 Автор
27.07.2023 20:39Если поменять папку по умолчанию, то исчезнет возможность открывать терминал в конкретной папке.
mayorovp
27.07.2023 20:39Ага, значит надо менять ярлык.
dartraiden
27.07.2023 20:39Ярлык не окажет влияния на запуск через Пуск → Выполнить. Вариант из статьи сложнее, но универсальный.
quarus
27.07.2023 20:39+1На Linux нет желания перейти?... и искать ничего не придётся. Создание Франкенштейна жизнеспособно только в фильмах.
Не совсем понимаю необходимость подобного скрещивания... поясните, если не сложно.
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+
dartraiden
27.07.2023 20:39очень страдаю без ShareX
Если не нужна запись видео, то Shutter вполне неплох.
unreal_undead2
27.07.2023 20:39Банально корпоративная почта/мессенджер проприетарные и под Windows, так что виндовый ноутбук нужен - и даже если основной девелопмент на линуксовых серверах, на ноуте образуются файлы которые иногда хочется грепнуть.
Stanislavvv
27.07.2023 20:39+1В busybox в лучшем случае posix shell (вот не знаю, насколько он posix), до баша ему далеко...
unreal_undead2
27.07.2023 20:39+1На простые вещи типа for i in `smth | grep нужное | grep -v ненужное`; do ... его вроде хватает.
Stanislavvv
27.07.2023 20:39+1Верно. Но башем от этого он не становится. В случае, если захочется что-то более сложное (к примеру, переменные обрабатывать не через A=`echo $B | ....`, а средствами баша, см. https://tldp.org/LDP/abs/html/refcards.html#AEN22828), то уже хрен.
unreal_undead2
27.07.2023 20:39Понятно, что заголовок может ввести в заблуждение, но основной смысл всё таки в том, что если нужно пару раз в неделю сделать простенький find/grep, можно обойтись без WSL или cygwin.
domix32
27.07.2023 20:39+2Можно поставить git bash и bashиться через него. У него есть в том числе и автотрансляция слешей в путях и в терминал подключается и большая часть утилит вполне имеется. Ещё и env c основной системой делит.
NutsUnderline
27.07.2023 20:39создать новый профиль Windows Terminal
Вот тут надо чуть подробнее пояснить
pae174
Busybox это набор самых базовых утилит. Если хочется, так сказать, полного погружения в тему, то надо смотреть в сторону CygWin .
unreal_undead2
cygwin - это POSIX поверх Win32 со своими артефактами, система в системе. Если хочется просто писать unix-way скрипты, запускающие виндовые программы, busybox вполне себе вариант.
domix32
Уж лучше WSL