Risposte:
Il comando di shell standard di Windows - cmd.exe
- non utilizza il <<
gestore a tutti .¹
Un singolo <
significa "leggere il file nell'input standard " cmd.exe
, ma due <
caratteri back-to-back non hanno senso cmd.exe
, quindi dà l'errore che hai.
L' <<
operatore è significativo per tutti i principali tipi di shell dei comandi Unix , dove viene utilizzato per i documenti qui : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Queste tre righe vengono inviate some-command
sul suo input standard.
Ciò è utile per inviare molto testo in un comando senza prima scriverlo in un file, come si farebbe con l' <
operatore. Lo uso spesso per incorporare un messaggio di "utilizzo" in uno script:
#!/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
È meglio che scrivere un sacco di echo
affermazioni poiché il testo ereditario è formattato esattamente come viene stampato sullo schermo. Inoltre, è più semplice gestire spazi bianchi, quotazioni, reindirizzamenti e interpolazione variabile in questo contesto. Si noti, ad esempio, che ho usato le parentesi angolari nel messaggio di utilizzo senza dover fare nulla di intelligente per impedire alla shell di provare a usarle per il reindirizzamento I / O.
Se vuoi fare cose del genere su Windows, puoi installare Cygwin e usare una delle sue shell. Se sei su Windows 10, puoi invece usare WSL .
Note:
Tale collegamento va nella struttura di documentazione archiviata di Windows XP. Microsoft ha interrotto il collegamento che stavo utilizzando in precedenza durante l'archiviazione di questi documenti, quindi nel caso in cui lo rompano di nuovo, ecco un riferimento di terze parti di backup.
L'unico altro cmd.exe
materiale di riferimento di cui sono a conoscenza su microsoft.com è il PDF dei comandi di Windows (4,9 MB, 948 pagine) che non fa altro che fornire un riferimento per la maggior parte (!) Dei comandi esterni integrati e forniti da Microsoft puoi dare al cmd
prompt. Questo PDF è incompleto su due basi. In primo luogo, e più rilevante qui, non vi è alcuna discussione combinata su come funziona il reindirizzamento nella cmd.exe
shell; non c'è nemmeno una discussione sulla grammatica della shell. In secondo luogo, la lista dei comandi del PDF è incompleta: la prima cosa che mi è capitato di controllo non è coperto: diskpart
.
Credo che tutto questo consegue chiari tentativi di Microsoft di sostituire cmd.exe
con PowerShell , che sono in corso da molti anni ormai. Nell'ultimo aggiornamento di Windows 10 al momento della stesura di questo documento, hanno preso ulteriori provvedimenti per nascondere l'esistenza dicmd.exe
, anche se non è ancora completamente andato.
Vale la pena notare che anche PowerShell non supporta un <<
operatore di reindirizzamento . Né - in una triste regressione da entrambe le shell Unix e cmd.exe
- supporta il <
reindirizzamento!
Il modo canonico di iniziare un documento qui è come l'ho scritto sopra, senza spazio tra la <<
parola e il delimitatore. Il mio confuso ricordo è che tutti gli usi dei documenti qui che ho visto negli script di shell sono fatti in questo modo. Anche la specifica POSIX per i documenti qui usa questo stile nei suoi esempi.
Tuttavia, un'attenta lettura di altre parti della specifica POSIX.1-2008 rivela che è legale inserire un numero di spazi o caratteri di tabulazione tra la <<
parola e il delimitatore. In particolare, vedere le regole di riconoscimento token 7 e 10 , la definizione io_here
nella grammatica della shell e la definizione della classe di caratteri "vuota" .
Ecco come documentare una shell. Prendi appunti, Microsoft. ;)
Test qui su Bash 4 e ksh93
conferma che funziona come previsto.
C'è >
e >>
ma solo <
, non c'è<<
command < filename Type a text file and pass the text to command
>
scrive in un NUOVO file.
>>
accoda a un file
<
legge da un file
|
invia un output di comandi nell'input di un altro comando
Vedi qui per un elenco Digitare% ^ in cmd.exe è un uovo di Pasqua di Windows?
Da quando è stato pubblicato, questo è stato aggiunto.
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.