1

Если под моей Windows с CygWin (v2.831 32bit) я делаю:

cmd
mode 80,50

ширина экрана меняется, но если я открою терминал CygWin, например, bash:

C:\cygwin\bin\bash --login -i
$ mode 80,50
bash: mode: command not found

Поэтому я предполагаю, что команда "mode" больше не существует. Пока существует много других команд, таких как:

$ getmac
Dirección física    Nombre de transporte
=================== ==========================================================
08-00-27-37-19-63   \Device\Tcpip_{8B079C63-6C1A-4D39-AF22-6F692B0188EB}

(Мои окна на испанском языке, извините)
Мне было интересно, какие другие команды (или, возможно, устройства, но не такие, как NUL, которые конкретно существуют) исчезают?

РЕДАКТИРОВАТЬ: Для googlers, прибывающих сюда в поисках проблемы "больше", он включен в пакет util-linux CygWin.

1 ответ1

2

Нет, команда "mode" не "исчезает", и вы все равно можете вызывать ее как «mode.com». Что происходит, так это то, что Cygwin-версия bash добавляет «.exe» к возможно исполняемому имени в приглашении, когда выполняет цикл поиска файлов в каталогах PATH. Однако классический Windows cmd.exe добавляет и «.exe», и «.com» (тоже «.bat» и «.cmd») в тот же процесс.

C:\Windows\System32>where mode
C:\Windows\System32\mode.com

Чтобы ответить на второй вопрос, я посмотрел путь cygwin к mode.com в Windows:

$ which mode.com
/cygdrive/c/Windows/system32/mode.com

и получил список исполняемых файлов * .com в том же каталоге.

$ ls -l /cygdrive/c/Windows/system32/*.com

Наблюдая за результатами, мы можем сказать, что по крайней мере следующие команды "исчезают" в bash: chcp.com, diskcomp.com, diskcopy.com, format.com, mode.com, more.com, tree.com.

ОБНОВЛЕНИЕ 05-03-2014, 16:45 GMT+0100: Принимая во внимание, что CMD.EXE автоматически завершает все файлы в PATH с расширением из списка PATHEXT, bash автоматически завершает все файлы в PATH, которые являются исполняемыми, независимо от их расширения.

Если я наберу 'forma' и нажму TAB, он автоматически заполняется до 'format.com'. Однако, если я наберу 'mode' и нажму клавишу TAB один раз, будет издан только звуковой сигнал; если я нажимаю TAB еще раз, появляется выбор между mode.com и modemui.dll. После небольшого тестирования, я думаю, что есть ошибка с завершением Cygwin bash, которая приводит к тому, что при первом нажатии TAB издается звуковой сигнал, а не выводится выбор. Это не зависит от расширения.

Другая проблема заключается в том, что я могу набрать 'notepad' или 'notepad.exe', и cygwin выясняет, что он должен выполнить /cygdrive/c/Windows/system32/notepad.exe. В то же время, если я хочу выполнить «foobar.bat» или «foobar.com», мне нужно предоставить расширение. Похоже, что Cygwin имеет специальную обработку суффикса '.exe', который действительно имеет место (см. Функцию Maybe_suffix и массив stat_suffixes ). Более того, похоже, что «.bat», «.com» и «.cmd» были специально удалены в spawn.cc версии 1.214 и не были добавлены в более недавнем обновлении.

Не стесняйтесь спрашивать о первой проблеме в списке рассылки cygwin, а также о второй проблеме в cygwin-developers. Я на самом деле не вовлечен в Cygwin, но вы можете внести свой вклад в это! :-) Также, чтобы исправить мой ответ на ваш первоначальный вопрос: все исполняемые файлы Windows с расширениями из списка PATHEXT, кроме.EXE исчезают:

C:\Windows\System32>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC

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