Как вызвать команды Linux через WSL в командной строке Windows?


Я хотел бы использовать ls и многие другие инструменты Linux из командной строки в Windows 10. Я знаю, что есть GnuWin32 и другие бинарные замены, но ни одна из них не работает так элегантно, как подсистема Windows для Linux (WSL); включая механизмы обновления.

С помощью WSL можно вызвать ls ... из командной строки через bash -c "ls ...", что отлично работает. В идеале, однако, я бы просто набрал ls в командной строке. Я могу создать ls.bat, который в основном делает @bash -c "ls %*" - но я бы чтобы сделать это для каждой отдельной команды, которую я хочу экспортировать. Существует ли более прямой способ экспорта ls (и многих других) в командную строку?

3 5

3 ответа:

По-видимому, это была самая востребованная функциядля WSL , и Microsoft теперь поддерживает эту функцию. Чтобы использовать команды linux из командной строки (или PowerShell), просто добавьте к команде префикс wsl. Так, например, вот как вы запускаете ls из CMD.

C:\temp> wsl ls
<- contents of C:\temp ->

Или вот как вы обновляете списки пакетов.

C:\temp> wsl sudo apt-get update
[sudo] password for username:
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]

Более подробную информацию можно найти в официальные документы. Я не уверен, что вы ищете решение,которое не включает в себя никаких префиксов. Если вот в чем дело, я пока не знаю никакого решения.

Однако Microsoft не поддерживает напрямую то, что вы просите...

  • Вы можете создать " консольный псевдоним" с помощью doskey.отлично, но эти Псевдонимы консоли не являются постоянными (при открытии новой команды Окно подсказки они все ушли).
  • CMD /? сообщает нам о следующих двух ключах реестра: HKey_Local_Machine\Software\Microsoft\Command Processor\AutoRun и HKey_Current_User\Software\Microsoft\Command Processor\AutoRun, которые (если параметр /D не был указан) будут проверены на выполнение содержимого (в этом порядке) при появлении нового окна командной строки. открытый.
Если мы сложим эти две вещи вместе с циклом FOR и хорошим, легко настраиваемым файлом в вашей папке пользователя, мы можем получить довольно близкое приближение того, что я думаю, что вы хотите.
Я собираюсь поместить это в HKLM и ссылаться на файл в %USERPROFILE%, называемый exportlinuxcommands, так что он доступен для всех пользователей, но легко настраивается для каждого пользователя, а также только для пользователей, которые его настраивают. Если вы хотите использовать его только для одного пользователя или не хотите, чтобы он был настроен на для каждого пользователя вам придется немного изменить инструкции.
  1. откройте редактор реестра
  2. перейти к HKey_Local_Machine\Software\Microsoft\Command Processor
  3. щелкните правой кнопкой мыши на пустой части окна и выберите "New" > "String Value" (или "Expandable String Value"), но расширения кажутся немного бессмысленными, когда вы понимаете, что командный процессор будет расширять их после того, как он прочитает значение в любом случае.)
  4. назовите его "автозапуск" (без кавычек)
  5. дважды щелкните на новом значении, которое вы только что выбрали. создано
  6. введите IF EXIST %USERPROFILE%\exportlinuxcommands FOR /F %i in (%USERPROFILE%\exportlinuxcommands) DO @doskey %i=bash -c "%i $*" в качестве "Value data".
Теперь вам просто нужно сделать файл в вашей папке %USERPROFILE% (т. е. C:\Users\YourUserName) под названием exportlinuxcommands, с каждой командой Linux вы хотите, чтобы псевдоним был в отдельной строке. Например:
ls
rm
cat

Хотите удалить один? Удалите его из файла, и он не будет там в следующем окне командной строки, которое вы откроете.
Хотите добавить еще один позже? Просто добавьте его в файл в своей собственной строке, и в следующий раз, когда вы откроете окно командной строки, он будет быть там.

Попробуйте использовать windowsBash

Выполните следующую команду внутри Windows Bash, чтобы создать ярлыки для команд

wget https://raw.githubusercontent.com/aleppos/windowsBash/master/windowsBash -P /usr/bin && chmod 0777 /usr/bin/windowsBash && windowsBash

Затем просто добавьте следующий каталог в свой путь в Windows * C:\windowsBash

Если вы хотите обновить список команд, просто снова запустите файл оболочки

windowsBash