Antworten:
Die Standard-Windows-Befehlsshell - cmd.exe
- verwendet den <<
Operator überhaupt nicht .¹
Ein einzelnes <
bedeutet "Datei in Standardeingabe einlesen " cmd.exe
, aber zwei <
Zeichen hintereinander sind bedeutungslos cmd.exe
, sodass der Fehler angezeigt wird, den Sie erhalten haben.
Der <<
Operator ist für alle wichtigen Arten von Unix-Befehlsshells von Bedeutung , wo er für die folgenden Dokumente verwendet wird : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Diese drei Zeilen werden some-command
an die Standardeingabe gesendet .
Dies ist nützlich, um viel Text in einen Befehl zu senden, ohne ihn zuerst in eine Datei zu schreiben, wie Sie es mit dem <
Operator tun müssten. Ich verwende es häufig, um eine "Verwendungs" -Nachricht in ein Skript einzubetten:
#!/bin/sh
if [ -z "$1" ]
then
cat <<USAGE
usage: myscript <files...>
Grobbles the foobie for all files given on the command line.
USAGE
exit 1
fi
# ... do something with command line arguments
Dies ist besser als das Schreiben einer Reihe von echo
Anweisungen, da der Heredoc-Text genau so formatiert ist, wie er auf dem Bildschirm gedruckt wird. Darüber hinaus ist es in diesem Zusammenhang einfacher, mit Leerzeichen, Anführungszeichen, Umleitung und variabler Interpolation umzugehen. Beachten Sie beispielsweise, dass ich in der Verwendungsnachricht spitze Klammern verwendet habe, ohne etwas Kluges tun zu müssen, um zu verhindern, dass die Shell versucht, sie für die E / A-Umleitung zu verwenden.
Wenn Sie solche Dinge unter Windows ausführen möchten, können Sie Cygwin installieren und eine seiner Shells verwenden. Wenn Sie unter Windows 10 arbeiten, können Sie stattdessen WSL verwenden.
Fußnoten:
Dieser Link wird in den archivierten Windows XP-Dokumentationsbaum eingefügt. Microsoft hat den Link, den ich zuvor beim Archivieren dieser Dokumente verwendet habe, unterbrochen. Falls sie ihn erneut unterbrechen, finden Sie hier eine Sicherungsreferenz eines Drittanbieters.
Das einzige andere cmd.exe
Referenzmaterial, das mir auf microsoft.com bekannt ist, ist das Windows-Befehls-PDF (4,9 MB, 948 Seiten), das kaum mehr als eine Referenz für die meisten (!) Der integrierten und von Microsoft bereitgestellten externen Befehle darstellt Sie können an der cmd
Eingabeaufforderung geben. Dieses PDF ist aus zwei Gründen unvollständig. Erstens, und hier am relevantesten, gibt es keine kombinierte Diskussion darüber, wie die Umleitung in der cmd.exe
Shell funktioniert . Es gibt nicht einmal eine Diskussion über die Shell-Grammatik. Zweitens ist die Befehlsliste des PDF unvollständig: Das erste, was ich überprüft habe, wird nicht behandelt : diskpart
.
Ich glaube , all dies folgt aus Microsofts klaren Versuchen zu ersetzen cmd.exe
mit Powershell , die nun schon seit vielen Jahren an wurde. In dem neuesten Windows 10-Update zum jetzigen Zeitpunkt haben sie weitere Schritte unternommen, um die Existenz von zu verbergencmd.exe
, obwohl es noch nicht vollständig verschwunden ist.
Es ist erwähnenswert, dass PowerShell auch keinen <<
Umleitungsoperator unterstützt . Auch - in einer traurigen Regression von beiden Unix-Shells und cmd.exe
- unterstützt es die <
Umleitung nicht!
Der kanonische Weg, um ein Here-Dokument zu starten, ist so, wie ich es oben geschrieben habe, ohne Leerzeichen zwischen dem <<
und dem Trennwort. Meine unscharfe Erinnerung ist, dass alle Verwendungen von Here-Dokumenten, die ich in Shell-Skripten gesehen habe, auch auf diese Weise erfolgen. Die POSIX-Spezifikation für Here-Dokumente verwendet diesen Stil auch in ihren Beispielen.
Eine sorgfältige Lektüre anderer Teile der POSIX.1-2008-Spezifikation zeigt jedoch, dass es zulässig ist, zwischen dem <<
und dem Trennwort eine gewisse Anzahl von Leerzeichen oder Tabulatoren zu setzen . Siehe insbesondere die Tokenerkennungsregeln 7 und 10 , die Definition io_here
in der Shell-Grammatik und die Definition der "leeren" Zeichenklasse .
So dokumentieren Sie eine Shell. Machen Sie sich Notizen, Microsoft. ;)
Testen Sie hier auf Bash 4 und ksh93
bestätigen Sie, dass dies wie erwartet funktioniert.
Es gibt >
und >>
aber nur <
gibt es keine<<
command < filename Type a text file and pass the text to command
>
schreibt in eine NEUE Datei.
>>
an eine Datei anhängen
<
liest aus einer Datei
|
sendet eine Befehlsausgabe an die Eingabe eines anderen Befehls
Eine Liste finden Sie hier. Ist die Eingabe von% ^ in cmd.exe ein Windows-Osterei?
Seitdem wurde dies hinzugefügt.
Starting a Program
===============
See start /? and call /? for help on all three ways.
Specify a program name
--------------------------------
c:\windows\notepad.exe
In a batch file the batch will wait for the program to exit. When
typed the command prompt does not wait for graphical
programs to exit.
If the program is a batch file control is transferred and the rest of the calling batch file is not executed.
Use Start command
--------------------------
start "" c:\windows\notepad.exe
Start starts a program and does not wait. Console programs start in a new window. Using the /b switch forces console programs into the same window, which negates the main purpose of Start.
Start uses the Windows graphical shell - same as typing in WinKey + R (Run dialog). Try
start shell:cache
Use Call command
-------------------------
Call is used to start batch files and wait for them to exit and continue the current batch file.