Respuestas:
El shell de comandos estándar de Windows cmd.exe
- no utiliza el <<
operador en absoluto .
Un solo <
significa "leer el archivo en la entrada estándar " cmd.exe
, pero dos <
caracteres consecutivos no tienen sentido cmd.exe
, por lo que da el error que obtuvo.
El <<
operador es significativo para todos los tipos principales de shell de comandos de Unix , donde se usa para documentos aquí : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Esas tres líneas se envían a some-command
su entrada estándar.
Esto es útil para enviar gran cantidad de texto a un comando sin escribirlo primero en un archivo, ya que tendría que hacerlo con el <
operador. Con frecuencia lo uso para incrustar un mensaje de "uso" en un 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
Esto es mejor que escribir un montón de echo
declaraciones ya que el texto heredoc está formateado exactamente como se imprime en la pantalla. Además, es más fácil lidiar con el espacio en blanco, las citas, la redirección y la interpolación variable en este contexto. Observe, por ejemplo, que he usado corchetes angulares en el mensaje de uso sin tener que hacer nada inteligente para evitar que el shell intente usarlos para la redirección de E / S.
Si desea hacer cosas como esta en Windows, puede instalar Cygwin y usar uno de sus shells. Si está en Windows 10, podría usar WSL en su lugar.
Notas al pie:
Ese enlace va al árbol de documentación archivado de Windows XP. Microsoft rompió el enlace que estaba usando anteriormente cuando archivaron estos documentos, por lo que en caso de que lo rompan nuevamente, aquí hay una referencia de respaldo de terceros.
El único otro cmd.exe
material de referencia que conozco en microsoft.com es el PDF de comandos de Windows (4.9 MB, 948 páginas) que hace poco más que proporcionar una referencia para la mayoría (!) De los comandos externos integrados y provistos por Microsoft Puedes dar en el momento cmd
. Este PDF está incompleto en dos bases. Primero, y lo más relevante aquí, no hay una discusión combinada de cómo funciona la redirección en el cmd.exe
shell; Ni siquiera hay una discusión sobre la gramática de shell. En segundo lugar, la lista de comandos del PDF es incompleta: lo primero que se me ocurrió de verificación no está cubierto: diskpart
.
Creo que todo esto se deriva de los claros intentos de Microsoft de reemplazar cmd.exe
con PowerShell , que han estado sucediendo durante muchos años. En la actualización más reciente de Windows 10 a partir de este escrito, han tomado medidas adicionales para ocultar la existencia decmd.exe
, aunque aún no se ha eliminado por completo.
Vale la pena señalar que PowerShell tampoco es compatible con un <<
operador de redirección . Ni, en una triste regresión de ambos shells de Unix y cmd.exe
, ¿es compatible con la <
redirección!
La forma canónica de comenzar un documento aquí es como lo he escrito anteriormente, sin espacio entre la <<
palabra delimitador y la delimitador. Mi recuerdo borroso es que todos los usos de los documentos aquí que he visto en los scripts de shell también se realizan de esta manera. La especificación POSIX para documentos aquí también utiliza este estilo en sus ejemplos.
Sin embargo, una lectura cuidadosa de otras partes de la especificación POSIX.1-2008 revela que es legal colocar cierto número de espacios o caracteres de tabulación entre la <<
palabra delimitador y la delimitador. En particular, ver las reglas de reconocimiento simbólico 7 y 10 , la definición de io_here
en la gramática cáscara , y la definición de la clase de caracteres "en blanco" .
Así es como documentas un shell. Toma notas, Microsoft. ;)
Prueba aquí en Bash 4 y ksh93
confirma que esto funciona como se esperaba.
Hay >
y >>
solo <
, no hay<<
command < filename Type a text file and pass the text to command
>
escribe en un NUEVO archivo.
>>
se agrega a un archivo
<
lee de un archivo
|
envía una salida de comandos a la entrada de otro comando
Ver aquí para obtener una lista ¿Escribir% ^ en cmd.exe es un huevo de Pascua de Windows?
Desde que se publicó esto se ha agregado.
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.