Я хочу, чтобы моя командная строка windows cmd+cygwin. Я должен иметь возможность запускать команды windows cmd и cygwin из командной строки windows cmd. Если я добавлю C:\cygwin64\bin в переменную PATH, я смогу запустить некоторые команды cygwin, такие как ls и clear а некоторые - через приглашение cmd , но пути стиля cygwin в этом случае не работают.

D:\>cd /cygdrive/d
The system cannot find the path specified.

Есть ли чистый способ сделать это?

ОБНОВЛЕНИЕ: Основываясь на предложениях, я попробовал это в Powershell.

PS C:\GIT_Repo> ls -lrt
Get-ChildItem : A parameter cannot be found that matches parameter name 'lrt'.
At line:1 char:4
+ ls -lrt
+    ~~~~
    + CategoryInfo          : InvalidArgument: (:) [Get-ChildItem], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.GetChildItemCommand

Эта команда работает в командной строке CMD:

C:\GIT_Repo>ls -lrt
total 752
-rw-rw-r--+ 1 Ashish None    931 Jun 26 23:39  Mp3_Properties.py
-rwxrwxr-x+ 1 Ashish None 763247 Jun 26 23:44 'My_mp3_File.mp3'

Путь не работает в Powershell тоже:

PS C:\GIT_Repo> cd /cygdrive/c
cd : Cannot find path 'C:\cygdrive\c' because it does not exist.
At line:1 char:1
+ cd /cygdrive/c
+ ~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (C:\cygdrive\c:String) [Set-Location], ItemNotFoundException
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.SetLocationCommand

Все еще безуспешно.

3 ответа3

2

Ответ ДА. Я смог сделать это с предложениями @Nathan.Эйлиша Ширайни

Необходимо соблюдать следующие меры предосторожности:

1 => Добавьте C:\cygwin64\bin в переменную PATH .

2 => Все пути /cygdrive/c должны быть заменены на c:/

C:\>cd C:/Software_Development/Examples
C:\Software_Development\Examples>
C:\Software_Development\CPP>cd ../Examples
C:\Software_Development\Examples>

3 => Все сторонние программы должны использоваться из установок Windows, а не из Cygwin.(Perl, Python и т.д.). Поскольку в поставляемом Cygwin программном обеспечении используются пути в стиле /cygdrive/c . Cygwin должен использоваться в качестве драйвера, который будет запускать установленное программное обеспечение Windows.

4 => Исполняемые файлы должны быть выполнены в стиле Windows ./Executable.o не будет работать.

C:\Software_Development\CPP>g++ MyTest.cpp -o MyTest.o
C:\Software_Development\CPP>ls
MyTest.cpp -o MyTest.o 
C:\Software_Development\CPP>MyTest.o
This program is compiled on windows

5 => Все команды, подобные cygwin linux, возвращают пути в /cygdrive/c/ style, вам нужно преобразовать их в c:/ там, где это необходимо.

C:\Software_Development\Examples>which python
/cygdrive/c/Python/Python36/python

Еще несколько команд:

C:\Software_Development\CPP>cat MyTest.cpp
#include<iostream>

using namespace std;

int main()
{
        cout << "This program is compiled on windows";
        return 0;
}


C:\Software_Development\CPP>rm MyTest.cpp

C:\Software_Development\CPP>

Здесь важно отметить, что все программное обеспечение cygwin будет указывать вам путь в /cygdrive/c который вам нужно будет преобразовать их в c:/

0

TL; DR, нет.

Способ организации файловой системы чрезвычайно отличается в Windows и Linux, и он не ограничивается использованием обратной или прямой косой черты. Например, в дисках организована только Windows, в Linux есть только корневой каталог.

Некоторые команды Windows разрешают использовать прямую косую черту в путях, но большинство используют их в качестве префикса флага (например, ping -t эквивалентен ping /t в Windows).


РЕДАКТИРОВАТЬ Как предложено EBGreen в их комментарии, вы можете попробовать использовать Powershell. По своему опыту я знаю, что он немного совместим с Bash, если вы не делаете ничего необычного (или вообще ничего). Вы не можете выполнять цепочку команд / конвейер, перенаправление файлов, строки с экранированными символами, переменные, и список можно продолжить ...

0

Конечно, это возможно.

Начиная с версии Cygwin 2.11.0. запущен в 2018 году

Когда необходимо выполнить команду linux через Command Prompt Windows по умолчанию, просто измените каталог на C:\cygwin\bin> (если cygwin установлен на C: :), тогда как каталог командной строки уровня пользователя Windows остается неизменным.

Например:

После установки Cygwin, в командной строке Windows, как пользователь, вы должны выполнить все команды Windows, как

C:\Users\ Мое имя пользователя> where /r C:\\Users\pictures myimage.png

С другой стороны, вы должны выполнить все команды Linux в

C:\cygwin\bin>

Если вы устанавливаете cygwin в C:/cygwin, чтобы изменить каталог командной строки с C:\Users\My Username> на C:\cygwin\bin>, просто используйте команду windows cd в командной строке, например,

C:\Users\My Username> cd C:/cygwin/bin

и запустить команду Linux, как,

C:\cygwin\bin> find C:/Users/pictures -name myimage.png

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .