Ausführen einer CygWin-Shell: Welche DOS-Befehle (Windows Console) verschwinden?

1

Wenn ich unter meinem Windows mit CygWin (v2.831 32bit) Folgendes mache:

cmd
mode 80,50

Die Bildschirmbreite ändert sich, aber wenn ich ein CygWin-Terminal wie bash öffne:

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

Ich gehe also davon aus, dass der Befehl "mode" nicht mehr existiert. Solange noch viele andere Befehle vorhanden sind, wie zum Beispiel:

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

(Mein Windows ist in Spanisch, sorry)
Ich habe mich gefragt, welche anderen Befehle (oder vielleicht Geräte, aber nicht wie NUL, die konkret bestehen bleiben) verschwinden?

EDIT: Für Googler, die hier ankommen auf der Suche nach das "mehr" Problem Es ist im Lieferumfang enthalten util-linux von CygWin.

Sopalajo de Arrierez
quelle

Antworten:

2

Nein, der Befehl 'mode' verschwindet nicht und Sie können ihn weiterhin als 'mode.com' aufrufen. Was passiert ist, dass die Cygwin-Version von bash ".exe" an einen möglicherweise ausführbaren Namen in der Eingabeaufforderung anhängt, wenn nach Dateien in den PATH-Verzeichnissen gesucht wird. Allerdings das klassische Windows cmd.exe Fügt im selben Prozess sowohl ".exe" als auch ".com" (auch ".bat" und ".cmd") hinzu.

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

Um die zweite Frage zu beantworten, habe ich den Cygwin-Pfad zu mode.com von Windows nachgeschlagen:

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

und erhielt eine Liste von * .com ausführbaren Dateien im selben Verzeichnis.

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

Wenn wir die Ergebnisse betrachten, können wir sagen, dass mindestens die folgenden Befehle in bash "verschwinden": chcp.com, diskcomp.com, diskcopy.com, format.com, mode.com, more.com, tree.com.

UPDATE 05.03.2014 16:45 GMT + 0100 : Während CMD.EXE alle Dateien in PATH mit einer Erweiterung aus der PATHEXT-Liste automatisch vervollständigt, vervollständigt bash automatisch alle Dateien in PATH, die unabhängig von ihrer Erweiterung ausführbar sind.

Wenn ich 'forma' eintippe und die Tabulatortaste drücke, wird es korrekt automatisch zu 'format.com' vervollständigt. Wenn ich jedoch 'mode' eingebe und einmal die Tabulatortaste drücke, wird nur ein Piepton ausgegeben. Wenn ich erneut die Tabulatortaste drücke, wird eine Auswahl zwischen "mode.com" und "modemui.dll" angezeigt. Nach einigen weiteren Tests gibt es meines Erachtens einen Fehler mit der Cygwin-Bash-Vervollständigung, der dazu führt, dass beim ersten Drücken der Tabulatortaste ein Piepton ausgegeben wird, anstatt eine Auswahl zu drucken. Dies ist unabhängig von der Erweiterung.

Ein weiteres Problem ist, dass ich entweder 'notepad' oder 'notepad.exe' eingeben kann und cygwin herausfindet, dass /cygdrive/c/Windows/system32/notepad.exe ausgeführt werden muss. Wenn ich 'foobar.bat' oder 'foobar.com' ausführen möchte, muss ich gleichzeitig eine Erweiterung bereitstellen. Es scheint, dass Cygwin eine spezielle Behandlung für das Suffix '.exe' hat, was in der Tat der Fall ist (siehe vielleicht_suffix Funktion und stat_suffixes Array). Außerdem sieht es so aus, als ob '.bat', '.com' und '.cmd' absichtlich in entfernt wurden spawn.cc version 1.214 und wurden nicht wieder in hinzugefügt ein neueres Update .

Fragen Sie nach dem ersten Problem in der Cygwin-Mailingliste und nach dem zweiten Problem in der Cygwin-Entwicklerliste. Ich bin selbst nicht wirklich in Cygwin involviert, aber so können Sie dazu beitragen! :-) Außerdem, um meine Antwort auf Ihre erste Frage zu korrigieren: Alle ausführbaren Windows-Dateien mit Erweiterungen aus der PATHEXT-Liste mit Ausnahme von .EXE verschwinden:

C:\Windows\System32>echo %PATHEXT%
.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
mkalkov
quelle
Das ist richtig, @mkalkov. Ich habe Ihre Antwort bearbeitet, um ".bat" und ".cmd" zur Liste der ausführbaren Programme hinzuzufügen, die das cmd.exe Shell sucht nach. Danke.
Sopalajo de Arrierez
Dieser Vorgang wird als bezeichnet "Pfaderweiterung" . Es könnte wahrscheinlich einen Weg geben, dies einzuschließen .com Dateien oder andere, wie .lnk . In der Zwischenzeit reicht es mir, nur "mode.com" einzugeben (einfacher natürlich mit der klassischen Tab-Vervollständigung).
Sopalajo de Arrierez
@SopalajodeArrierez, danke für deine Antworten. Ich habe mir dieses Problem genauer angesehen, die Ursache Ihres Problems herausgefunden und eine bessere Antwort gefunden.
mkalkov
zuerst TAB Drücken von erzeugt einen Piepton, wenn mehr als eine Option in jeder mir bekannten Linux-Shell vorhanden ist. Das ist völlig normal. Ich denke nicht, dass das ein Fehler sein sollte. Die Auswahl wird erst nach einer Sekunde auf dem Bildschirm ausgedruckt TAB drücken.
Sopalajo de Arrierez