Linux команды в windows

Обновлено: 07.07.2024

Я не знаю, ты пользуешься Линуксом или Уиндоузом (обычно туториалы рассчитаны на линуксоидов и макосников, уиндоуз не модный среди молодежи). В макоси все практически так же как и в линуксе, в windows пошли своим путем и сделали все как в DOS.

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

Краткий мануал чайника по командной строке:

Как попасть в командную строку?

  • Windows XP: Пуск — Выполнить — набрать cmd — нажать [enter]
  • Windows7: Пуск — набрать cmd - наждать [enter]
  • MacOS: Запустить приложение Терминал (его можно найти поиском в той фигне которая справа вверху экрана)
  • Ubuntu: Запустить приложение Терминал или нажать Alt + Ctrl + F1 (ааа как вернуться назад? Ctrl + F7)
  • Linux: если ты линуксоид, ты и так знаешь

Во всех операционных системах

↑,↓ — стрелки вверх и вниз в командной строке позволяют смотреть предыдущие введенные команды, чтобы 2 раза не набирать. В Windows при закрытии окошка консоли вся история теряется, в других ОС — сохраняется.

[tab] — автодополняет имена файлов и команды. Если в текущем каталоге есть файл file.txt, ты наберешь fi и нажмешь [tab] то он автодополнит имя файла (или предложит варианты, если таких файлов несколько).

[ctrl+c] — прерывает выполнение команды, например, если она долго тупит

Важно: клавиша Esc не работает в командной строке. Клавиши Ctrl + C, V, X не работают как «копировать/вырезать/вставить» (иногда для вставки можно использовать Shift + Ins). Клавиша Ctrl + Q не работает как «выход».

В линуксе и маке, [ctrl+l] очищает экран, [ctrl+k] и [ctrl+u] удаляют все перед или после курсора, [ctrl+w] удаляет слово перед курсором, [ctrl+r] делает поиск по истории команд (для отмены поиска нажми [ctrl+c], escape в командной строке не работает, для завершения поиска нажми стрелку вправо/влево), [ctrl+d] завершает работу и закрывает консоль.

Еще в линуксе и маке иногда не работают Home и End, используй [ctrl+a] чтобы перейти в начала строки и [ctrl+e], чтобы в конец. [alt + b] (back) и [alt + f] (forward) двигают курсор на 1 слово назад/вперед.

В командной строке не работает ctrl+v,c,x для вставки, копирования и вырезания текста. Иногда (зависит от настроек системы) вставить текст можно через [shift+ins], иногда правой кнопкой мыши. Скопировать текст можно, выделив мышью (в Windows надо разрешить выделение текста сначала в настройках окна и нажать Enter после выделения).

В командной строке результат выполнения команд зависит от того, в каком каталоге и на каком диске ты находишься. Какой каталог текущий, в Windows написано в подсказке, а в linux можно узнать командой pwd (print working directory)

Чтобы перейти в другой каталог, в линуксе используют команду cd :

В Windows, сначала надо перейти на нужный диск командой c: , d: , e: и так далее. Потом использовать cd или chdir :

Обрати внимание, windows и linux используют разные виды слешей. Обрати внимание, .. обозначает «родительский каталог». Обрати внимание, только в линукс и мак

обозначает «домашний каталог» (это /home/username или /Users/username ). . (одна точка) обозначает текущий каталог и cd . никуда не перейдет. / (линукс) или \ (Windows) обозначает корневой каталог.

В linux — команда clear или клавиша [ctrl+L], в windows — команда cls (clear screen).

Посмотреть, какие файлы есть в текущем каталоге, можно командой dir в Windows и командой ls в линуксе ( ls -a — показывает все файлы, включая скрытые, ls -l — показывает не только имена, но и размер, дату создания файла, права на него).

Посмотреть права на файл в Линукс можно либо командой ls -l , либо stat file.txt

Команды и оболочка

Оболочка — это cmd.exe в Windows и bash в линукс, это та программа, которая собственно мигает курсором и выполняет твои команды. Ты набираешь команды, а она их выполняет. Команда обычно состоит из имени команды, и, иногда, дополнительных параметров, отделенных пробелом, вроде:

Почти у любой команды есть подсказки. Чтобы их увидеть, добавь к имени команды параметр ( --help или /? ):

В линукс: ls --help — выведет справку по команде ls

В линукс: man bash — выведет подробную длинную справку по команде bash (для выхода жми q, для прокрутки используй стрелки и PgUp/PgDn)

В Windows: dir /? — выведет справку по команде dir

В Windows: help выведет подсказку по основным командам

Команды бывают внутренние (это маленький список команд, встроенных в оболочку). Встроенные команды — это, например, cd в линукс или exit в Windows. Их мало.

Внешние команды — их большинство — это фактически программы, лежащие на диске. Оболочка ищет их не по всему диску, а только в заранее заданных папках. Список папок перечислен в специальной переменной PATH. Просмотреть эту переменную можно так:

В линуксе: echo $PATH

В windows: echo %PATH%

В linux PATH — это папки /bin, /usr/bin, /usr/local/bin, /sbin, /usr/sbin, именно в них в Линуксе хранятся почти все программы. В текущем каталоге програмы не ищутся, если это не указать явно.

В Windows PATH — это всякие системные папки вроде c:\windows и так далее + текущий каталог, в котором ты находишься. Заметь, что папки вроде c:\program files\autocad в PATH не добавлены и в Windows таким образом, из командной строки обычные программы и игры, установленные в Program Files, не запустить. Только то, что положено в системные папки.

Таким образом: если ты под линуксом, и ты набираешь команду php , то скорее всего файл php лежит в одной из *bin папок и эта команда запустит php. Если ты под Windows установил php допустим в c:\php, и не прописал этот путь в PATH, то набрав php , оболочка не найдет файл php.exe и ничего не запустит. И ты скажешь «что за кривой мануал, ничего не работает, ну его нафиг».

Что же делать? 1) добавить папку с php в PATH через мой компьютер — свойства и перезалогиниться в систему 2) писать вместо php полный путь c:\php\php.exe

Продолжаем. Допустим, ты хочешь запустить в командной строке файл my.php , который находится в текущем каталоге:

Допустим, ты хочешь запустить php-файл не из текущего каталога. Тогда надо написать путь к нему:

В общем, проще запускать файлы из текущег каталога, чем мучаться с путями.

Больше команд — linux

Попрактиковаться в линукс в командной строке можно на таких командах:

Подробнее о работе команд можно узнать с помощью параметра --help , дописанного после команды.

Больше команд - Windows

Попрактиковаться в комнадной строке в Windows можно так:

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

Команды для работы с сетью Интернет

В линукс показать информацию о настройке сети: ifconfig (или /sbin/ifconfig если у тебя в PATH нет /sbin)

В Windows показать информацию о сети: ipconfig

Показать список открытых с компьютера соединений: netstat (в подсказке по команде указаны также параметры, с помощью которых, например, можно вывести какая программа установила это соединение) Проверить путь до какого-то сервера или узла сети:


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

В вашей школьной лаборатории может быть установлен Linux, но лично у вас нет ноутбука с Linux, а обычный компьютер с Windows, как и у всех.

Ваша домашняя работа должна выполняться с командами Linux, и вы задаетесь вопросом, как запускать команды и скрипты Bash в Windows.

Вы можете установить Linux вместе с Windows в режиме двойной загрузки.

Этот метод позволяет вам выбрать Linux или Windows при запуске компьютера.

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

Вы также можете использовать терминалы Linux онлайн, но ваша работа не будет сохранена.

Хорошая новость заключается в том, что есть несколько способов запуска команд Linux внутри Windows, как и в любом обычном приложении. Разве это не круто?

Использование команд Linux внутри Windows

Если вы просто хотите попрактиковаться в Linux, вы можете использовать один из этих методов для запуска команд Bash в Windows.

1. Используйте оболочку Linux Bash в Windows 10

Знаете ли вы, что вы можете запустить дистрибутив Linux внутри Windows 10?

Подсистема Windows для Linux (WSL) позволяет запускать Linux внутри Windows.

В следующей версии WSL будет использоваться настоящее ядро Linux внутри Windows.

Этот WSL, также называемый Bash для Windows, дает вам дистрибутив Linux в режиме командной строки, работающий как обычное приложение Windows.


Вы можете найти некоторые популярные дистрибутивы Linux, такие как Ubuntu, Kali Linux, openSUSE и т. д. В Магазине Windows.

Вам просто нужно скачать и установить его, как любое другое приложение Windows.

После установки вы можете запускать все необходимые вам команды Linux.


2. Используйте Git Bash для запуска команд Bash в Windows

Вы, наверное, знаете, что такое Git.

Это система контроля версий, разработанная создателем Linux Линусом Торвальдсом

Одним из инструментов, включенных в Git для Windows, является Git Bash.

Приложение Git Bash предоставляет и слой эмуляции для командной строки Git.

Помимо команд Git, Git Bash также поддерживает множество утилит Bash, таких как ssh, scp, cat, find и т. д.


Другими словами, вы можете запускать множество общих команд Linux / Bash, используя приложение Git Bash.

Вы можете установить Git Bash в Windows, скачав и бесплатно установив инструмент Git для Windows с веб-сайта:

3. Использование команд Linux в Windows с Cygwin

Если вы хотите запускать команды Linux в Windows, рекомендуется Cygwin.

Cygwin был создан в 1995 году для обеспечения POSIX-совместимой среды, которая изначально работает в Windows.

В течение двух десятилетий пользователи Windows используют Cygwin для запуска и выполнения команд Linux / Bash.


Вы можете скачать Cygwin с официального сайта, который будет показан ниже.

4. Используйте Linux на виртуальной машине

Таким образом, вы устанавливаете дистрибутив Linux (с графическим интерфейсом) внутри Windows и запускаете его как обычное приложение Windows.

Этот метод требует, чтобы в вашей системе было достаточно оперативной памяти, по крайней мере, 4 ГБ, но лучше, если у вас более 8 ГБ.

Здесь хорошо то, что вы по-настоящему почувствуете использование настольного Linux. Если вам нравится интерфейс, вы можете позже полностью перейти на Linux.

Существует два популярных инструмента для создания виртуальных машин в Windows: Oracle VirtualBox и VMware Workstation Player.

Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

Под GNU/Linux-дистрибутивы создано огромное количество полезных и удобных инструментов и приложений для обычных пользователей и разработчиков. Далеко не всё из этого доступно на Windows, но, к счастью, для ОС от Microsoft есть решения, исправляющие эту проблему.

Содержание

WSL — официальная подсистема Linux внутри Windows

В Windows 10 существует крайне полезная вещь под названием Windows Subsystem for Linux (WSL). Она позволяет использовать GNU/Linux-среду прямо в Windows и запускать не только команды, но и, например, Bash-скрипты. Для использования WSL необходимо следовать инструкции ниже.

Шаг 1. Проверьте, подходит ли текущая версия Windows требованиям. Для этого нажмите сочетание клавиш Win+R, затем введите winver. Найдите строку «Сборка ОС» — она должна быть свежее версии 14316.

Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

Шаг 2. Запустите стандартную утилиту PowerShell от имени администратора и введите в ней команду для включения WSL:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Шаг 3. Если версия Windows, определённая в первом пункте, свежее 18362, вы можете установить WSL 2, который в разы быстрее первой версии и обладает доработанным ядром. Введите команду ниже, если нужно установить WSL 2:

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

После этого скачайте и установите пакет обновления с официального сайта.

Шаг 4. Перезагрузите компьютер. Если была произведена установка WSL 2, введите в PowerShell от имени администратора следующую команду:

Шаг 5. После перезагрузки откройте фирменный магазин приложений Microsoft Store и найдите подходящий GNU/Linux-дистрибутив. Самым популярным является Ubuntu — вы можете установить любую версию из представленных в Microsoft Store.

Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

Шаг 6. Как только установка завершится, найдите дистрибутив в меню «Пуск» и запустите его.

Шаг 7. Пройдите этап первоначальной настройки, введя имя нового пользователя и придумав пароль.

Шаг 8. Теперь различные GNU/Linux-команды можно выполнять, запустив дистрибутив, либо введя в командной строке wsl <команда>. Например, для просмотра всех файлов в текущей директории достаточно в командной строке выполнить wsl ls -a.

Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

Обращу внимание на то, что путь к дискам в WSL отличается от такового в Windows. Вместо привычного C:/ используйте /mnt/c/. Также не забывайте про экранирование пробелов с помощью символа \ — это также пригодится при вводе путей к файлам.

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

Шаг 1. Загрузите X-сервер и установите его.

Шаг 2. Запустите его с помощью ярлыка на рабочем столе. В открывшемся окне выберите вариант Multiple windows, затем Start no client. Завершите настройку кнопкой Finish.

Шаг 3. Откройте дистрибутив через меню Пуск и выполните команду export DISPLAY=:0

Шаг 4. Запустив приложение с графическим интерфейсом в WSL, вы увидите новое окно прямо в Windows.

Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

CoreUtils — лёгкий инструмент для запуска базовых команд

Плюс данной утилиты — возможность запуска не только на Windows 10, но и на более старых версиях ОС. Кроме того, она легка и не занимает много места. Не обошлось без недостатков — программа скудна на функционал и не обновлялась очень давно. Она не только не умеет запускать скрипты и приложения с GUI, но и поддерживает лишь самые базовые GNU/Linux-команды. Установка CoreUtils весьма проста.

Шаг 1. Скачайте утилиту с официального сайта.

Шаг 2. Следуйте инструкциям установщика.

Переменной Path нет? Тогда для начала создайте её кнопкой «Создать», затем в поле имени введите Path, а в поле значения — строку выше.

Шаг 4. Запустите командную строку и выполняйте команды прямо там.

Cygwin — запуск команд и Bash-скриптов

Ещё одна утилита, схожая с CoreUtils, но обладающая более широким функционалом — в том числе и возможностью запуска скриптов. Из минусов — немалый вес и более сложная установка. Разумеется, не идёт ни в какое сравнение с максимально удобным WSL, но для базовых команд вполне подойдёт.

Шаг 1. Загрузите Cygwin и запустите установку.

Шаг 2. Выберите Install from Internet, укажите директории для установки и загрузки пакетов, а также любой подходящий сайт из списка для скачивания файлов.

Шаг 3. В процессе установки можете выбрать необходимые пакеты, либо сразу нажать «Далее», оставив базовый набор.

Переменной Path нет? Тогда для начала создайте её кнопкой «Создать», затем в поле имени введите Path, а в поле значения — строку выше.

Как выполнять Linux-команды внутри Windows: официальный и сторонние способы
Как выполнять Linux-команды внутри Windows: официальный и сторонние способы

Шаг 5. Команды можно выполнять как через командную строку, так и через специальный терминал.

Шаг 6. Для удаления Cygwin достаточно удалить папку, в которую программа была установлена, а также (по желанию) значение из переменной Path по методу, обратному тому, что был описан в 4 шаге (не удаляйте саму переменную).

Если вы иногда все же используете операционную систему от Microsoft, вам, наверное, очень нужны некоторые утилиты Linux в windows. Было бы очень удобно использовать стандартные утилиты командной строки для фильтрации вывода, сортировки, фильтрации и потокового редактирования, в Windows, где такие функции не поддерживаются.

Для реализации этого есть несколько решений. В этой статье мы рассмотрим только два из них. Первое, о котором вы, возможно, уже слышали, а может, уже и используете - Cygwin. Второе, нечто более интересное и новое - Cash. Начнем с Cygwin. В последней версии Windows 10 появилось и третье решение - возможность запускать linux команды в windows нативно, с помощью специальной подсистемы. Об этом читайте в отдельной статье.

Cygwin

Cygwin - это набор инструментов, обеспечивающий Unix подобную среду в Windows. Здесь нельзя запускать уже существующие утилиты для Linux. Для того чтобы выполнить linux команду из Windows Cygwin, ее нужно сначала перекомпилировать.

Тем не менее пересобрано уже достаточно много программного обеспечения. Cygwin даст вам Linux подобную среду со многими утилитами, к которым вы уже привыкли в Linux. Его можно использовать как для стандартных утилит таких как команда cp windows, так и для подключения к удаленному серверу по ssh.

Установка Cygwin

cygwin6

Для установки вам придется пройти несколько шагов мастера, по умолчанию программа будет установлена в C:\Cygwin:

cygwin7

cygwin8

cygwin9

cygwin10

cygwin11

С установочным пакетом не поставляется полный набор окружения. Оно будет загружено в процессе установки. В этом окне нужно выбрать сервер для загрузки компонентов:

cygwin12

cygwin13

Затем необходимо выбрать пакеты, которые нужно загрузить и установить. Доступно довольно-таки много программ и они рассортированы по категориям. Если вы не знаете нужен ли вам тот или иной пакет, оставьте значение по умолчанию. Вы сможете установить их потом:

cygwin14

Осталось только нажать Next для начала загрузки и завершения установки.

cygwin15

cygwin16

Добавление Cygwin в Path

После завершения установки, чтобы выполнить команды linux в windows с максимальным удобством, желательно добавить папку с исполняемыми файлами Cygwin в переменную среды Path.

Вы можете запустить терминал Cygwin, кликнув по ярлыку на рабочем столе. Откроется терминал с папкой C:\Cygwin\bin

Здесь можно выполнять все нужные linux команды в windows, но вы не сможете их выполнить в другой директории или другом терминале.

Чтобы решить эту проблему, необходимо добавить папку Cygwin в переменную Path. Откройте окно свойства системы с помощью сочетания клавиш Win+Pause/Break, затем выберите пункт Дополнительные параметры системы на левой панели:

cygwin3

На вкладке дополнительно выберите Переменные среды:

cygwin2

Найдите в списке переменную Path и нажмите Изменить:

cygwin4

Добавьте в конец строки вот такую запись:

cygwin5

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

Это кое-что совсем новое. Утилита с открытым исходным кодом Cash, это кроссплатформенная реализация командной оболочки Linux на JavaScript. Цель этого проекта обеспечить более гибкую, простую альтернативу Cygwin, для тех кто хочет чувствовать себя в WIndows, как и в Linux.

Установив Cash, вы сможете выполнить linux команду из windows в любом эмуляторе терминала, в том числе в стандартной командной строке Windows.

На данный момент поддерживаются только некоторые утилиты linux для windows. Вот список поддерживаемых:

Так как утилита еще находится на стадии разработки, то список команд Linux в Windows будет постоянно увеличиваться. Вы также можете проголосовать за добавление команд которые вам нужны.

Вот как все работает:

Что самое интересное, вы можете комбинировать Windows и Linux команды. Например, вы можете выполнить:

ipconfig | grep IPv4 | sort

И команда правильно отработает. Сначала выполнится ipconfig, а затем результат будет отфильтрован с помощью Grep.

Установка Cash в Windows

После того как Node.js Будет установлена, можно переходить к установке Cash. Его можно установить в нескольких режимах:

  • Ручное использование Cash - нужно выполнить cash чтобы начать запускать linux команды
  • Глобальное использование - linux команды доступны во всех терминалах windows
  • Установить только некоторые команды - вы можете выбрать компоненты для установки если не хотите ставить все

Для установки Cash глобально откройте командную строку Windows с помощью Win+R:

npm install cash-global -g

Установка может занять несколько минут, в зависимости от скорости вашего интернет-соединения. После завершения установки вы можете сразу тестировать Linux команды в Windows.

Выводы

Как я уже говорил, проект Cash еще на стадии разработки и есть вероятность что вы столкнетесь с ошибками. Не забудьте сообщить о найденных ошибках разработчикам, чтобы помочь улучшить проект. Если для вас критична стабильность лучше использовать старый добрый Cygwin.

Нам, пользователям Linux нечасто понадобиться использование unix команд в windows и такие инструменты . Мы можем использовать Linux команды напрямую в нашей системе. Но если вы по каким-либо причинам не можете установить Linux, и все же хотите использовать linux команды, это может быть отличным решением.

Типичный вопрос разработчиков под Windows: «Почему здесь до сих пор нет <ВСТАВЬТЕ ТУТ ЛЮБИМУЮ КОМАНДУ LINUX> ?». Будь то мощное пролистывание less или привычные инструменты grep или sed , разработчики под Windows хотят получить лёгкий доступ к этим командам в повседневной работе.

  • Повсеместное добавление wsl утомительно и неестественно.
  • Пути Windows в аргументах не всегда срабатывают, потому что обратные слэши интерпретируются как escape-символы, а не разделители каталогов.
  • Пути Windows в аргументах не переводятся в соответствующую точку монтирования в WSL.
  • Не учитываются параметры по умолчанию в профилях WSL с алиасами и переменными окружения.
  • Не поддерживается завершение путей Linux.
  • Не поддерживается завершение команд.
  • Не поддерживается завершение аргументов.

C помощью оболочек функций PowerShell мы можем добавить автозавершение команд и устранить необходимость в префиксах wsl , транслируя пути Windows в пути WSL. Основные требования к оболочкам:

  • Для каждой команды Linux должна быть одна оболочка функции с тем же именем.
  • Оболочка должна распознавать пути Windows, переданные в качестве аргументов, и преобразовывать их в пути WSL.
  • Оболочка должна вызывать wsl с соответствующей командой Linux на любой вход конвейера и передавая любые аргументы командной строки, переданные функции.


Список $command определяет команды для импорта. Затем мы динамически генерируем обёртку функции для каждой из них, используя команду Invoke-Expression (сначала удалив любые алиасы, которые будут конфликтовать с функцией).

Функция перебирает аргументы командной строки, определяет пути Windows с помощью команд Split-Path и Test-Path , а затем преобразует эти пути в пути WSL. Мы запускаем пути через вспомогательную функцию Format-WslArgument , которую определим позже. Она экранирует специальные символы, такие как пробелы и скобки, которые в противном случае были бы неверно истолкованы.

Наконец, передаём wsl входные данные конвейера и любые аргументы командной строки.

С помощью таких обёрток можно вызывать любимые команды Linux более естественным способом, не добавляя префикс wsl и не беспокоясь о том, как преобразуются пути:

  • man bash
  • less -i $profile.CurrentUserAllHosts
  • ls -Al C:\Windows\ | less
  • grep -Ein error *.log
  • tail -f *.log

В Linux принято определять алиасы и/или переменные окружения в профилях (login profile), задавая параметры по умолчанию для часто используемых команд (например, alias ls=ls -AFh или export LESS=-i ). Один из недостатков проксирования через неинтерактивную оболочку wsl.exe — то, что профили не загружаются, поэтому эти параметры по умолчанию недоступны (т. е. ls в WSL и wsl ls будут вести себя по-разному с алиасом, определённым выше).

PowerShell предоставляет $PSDefaultParameterValues, стандартный механизм для определения параметров по умолчанию, но только для командлетов и расширенных функций. Конечно, можно из наших оболочек сделать расширенные функции, но это вносит лишние осложнения (так, PowerShell соотносит частичные имена параметров (например, -a соотносится с -ArgumentList ), которые будут конфликтовать с командами Linux, принимающими частичные имена в качестве аргументов), а синтаксис для определения значений по умолчанию будет не самым подходящим (для определения аргументов по умолчанию требуется имя параметра в ключе, а не только имя команды).

Однако с небольшим изменением наших оболочек мы можем внедрить модель, аналогичную $PSDefaultParameterValues , и включить параметры по умолчанию для команд Linux!


Передавая $WslDefaultParameterValues в командную строку, мы отправляем параметры через wsl.exe . Ниже показано, как добавить инструкции в профиль PowerShell для настройки параметров по умолчанию. Теперь мы можем это сделать!


Поскольку параметры моделируются после $PSDefaultParameterValues , вы можете легко их отключить на время, установив ключ "Disabled" в значение $true . Дополнительное преимущество отдельной хэш-таблицы в возможности отключить $WslDefaultParameterValues отдельно от $PSDefaultParameterValues .

PowerShell позволяет регистрировать завершители аргументов с помощью команды Register-ArgumentCompleter . В Bash есть мощные программируемые средства для автозавершения. WSL позволяет вызывать bash из PowerShell. Если мы можем зарегистрировать завершители аргументов для наших оболочек функций PowerShell и вызвать bash для создания завершений, то получим полное автозавершение аргументов с той же точностью, что и в самом bash!


Код немного плотный без понимания некоторых внутренних функций bash, но в основном мы делаем следующее:

  • Регистрируем завершатель аргументов для всех наших обёрток функций, передавая список $commands в параметр -CommandName для Register-ArgumentCompleter .
  • Сопоставляем каждую команду с функцией оболочки, которую использует bash для автозавершения (для определения спецификаций автозавершения в bash используется $F , сокращение от complete -F <FUNCTION> ).
  • Преобразуем аргументы PowerShell $wordToComplete , $commandAst и $cursorPosition в формат, ожидаемый функциями автозавершения bash в соответствии со спецификациями программируемого автозавершения bash.
  • Составляем командную строку для передачи в wsl.exe , который обеспечивает правильную настройку среды, вызывает соответствующую функцию автозавершения и выводит результаты с разбиением по строкам.
  • Затем вызываем wsl с командной строкой, разделяем выдачу разделителями строк и генерируем для каждой CompletionResults , сортируя их и экранируя символы, такие как пробелы и скобки, которые в противном случае были бы неверно истолкованы.
  • ssh -c <TAB> -J <TAB> -m <TAB> -O <TAB> -o <TAB> -Q <TAB> -w <TAB> -b <TAB>

<TAB> будет циклически перебирать параметры. <Ctrl + пробел> покажет все доступные опции.

Кроме того, поскольку теперь у нас работает автозавершение bash, вы можете автозавершать пути Linux непосредственно в PowerShell!

  • less /etc/<TAB>
  • ls /usr/share/<TAB>
  • vim

С помощью PowerShell и WSL мы можем интегрировать команды Linux в Windows как нативные приложения. Нет необходимости искать билды Win32 или утилиты Linux или прерывать рабочий процесс, переходя в Linux-шелл. Просто установите WSL, настройте профиль PowerShell и перечислите команды, которые хотите импортировать! Богатое автозавершение для параметров команд и путей к файлам Linux и Windows — это функциональность, которой сегодня нет даже в нативных командах Windows.

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

Какие команды Linux вы считаете наиболее полезными? Каких ещё привычных вещей не хватает при работе в Windows? Пишите в комментариях или на GitHub!

Читайте также: