Respostas:
O shell padrão de comando do Windows - cmd.exe
- não usa o <<
operador em tudo .¹
Um único <
significa "ler arquivo na entrada padrão " para cmd.exe
, mas dois <
caracteres consecutivos não fazem sentido cmd.exe
, portanto, fornece o erro que você recebeu.
O <<
operador é significativo para todos os principais tipos de shell de comando do Unix , onde é usado para os documentos aqui : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Essas três linhas são enviadas para some-command
sua entrada padrão.
Isso é útil para enviar muito texto em um comando sem gravá-lo em um arquivo primeiro, como você faria com o <
operador. Eu freqüentemente o uso para incorporar uma mensagem de "uso" em um 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
Isso é melhor do que escrever echo
várias instruções, pois o texto do heredoc é formatado exatamente como é impresso na tela. Além disso, é mais fácil lidar com espaço em branco, cotação, redirecionamento e interpolação de variáveis nesse contexto. Observe, por exemplo, que usei colchetes angulares na mensagem de uso sem precisar fazer nada inteligente para impedir que o shell tente usá-los para o redirecionamento de E / S.
Se você quiser fazer coisas assim no Windows, poderá instalar o Cygwin e usar uma de suas conchas. Se você estiver no Windows 10, poderá usar o WSL .
Notas de rodapé:
Esse link vai para a árvore de documentação arquivada do Windows XP. A Microsoft quebrou o link que eu estava usando anteriormente quando arquivaram esses documentos. Portanto, caso o quebrem novamente, aqui está uma referência de backup de terceiros.
O único outro cmd.exe
material de referência que conheço no microsoft.com é o PDF de comandos do Windows (4,9 MB, 948 páginas), que pouco mais do que fornece uma referência para a maioria (!) Dos comandos externos internos e fornecidos pela Microsoft você pode dar no cmd
prompt. Este PDF está incompleto em duas bases. Primeiro, e mais relevante aqui, não há discussão combinada de como o redirecionamento funciona no cmd.exe
shell; não há sequer uma discussão sobre gramática de shell. Em segundo lugar, a lista de comando do PDF é incompleta: a primeira coisa que aconteceu com a seleção não está coberto: diskpart
.
Eu acredito que tudo isto decorre claras tentativas da Microsoft para substituir cmd.exe
com PowerShell , que vêm acontecendo há muitos anos. Na atualização mais recente do Windows 10, até o momento em que este artigo foi escrito, eles tomaram outras medidas para ocultar a existênciacmd.exe
, embora ainda não tenha desaparecido completamente.
Vale ressaltar que o PowerShell também não oferece suporte a um <<
operador de redirecionamento . Nem - em uma triste regressão dos dois shells do Unix e cmd.exe
- ele suporta <
redirecionamento!
A maneira canônica de iniciar um documento aqui é como escrevi acima, sem espaço entre a <<
palavra delimitadora e a. Minha lembrança difusa é que todos os usos dos documentos aqui que eu vi nos scripts de shell também são feitos dessa maneira. A especificação POSIX para documentos aqui também usa esse estilo em seus exemplos.
No entanto, uma leitura cuidadosa de outras partes da especificação POSIX.1-2008 revela que é legal colocar algum número de caracteres de espaço ou tabulação entre a <<
palavra delimitadora e a. Em particular, ver o reconhecimento simbólico regras 7 e 10 , a definição de io_here
em gramática shell , e a definição de o "blank" classe de personagem .
É assim que você documenta um shell. Faça anotações, Microsoft. ;)
Testando aqui no Bash 4 e ksh93
confirma que isso funciona conforme o esperado.
Existe >
e , >>
somente <
, não há<<
command < filename Type a text file and pass the text to command
>
grava em um novo arquivo.
>>
anexa a um arquivo
<
lê de um arquivo
|
envia uma saída de comandos para a entrada de outro comando
Veja aqui para obter uma lista . Digitar% ^ into cmd.exe é um ovo de páscoa do Windows?
Desde que foi publicado, este foi adicionado.
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.