Le shell de commande Windows standard - cmd.exe
- n'utilise pas du tout l' <<
opérateur .¹
Un seul <
signifie «lire le fichier dans l'entrée standard » cmd.exe
, mais deux <
caractères consécutifs n'ont pas de sens cmd.exe
, ce qui donne l'erreur que vous avez.
L' <<
opérateur est significatif pour tous les principaux types de shell de commande Unix , où il est utilisé pour les documents ici : ²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
Ces trois lignes sont envoyées à some-command
son entrée standard.
C'est utile pour envoyer beaucoup de texte dans une commande sans l'écrire d'abord dans un fichier, comme vous le feriez avec l' <
opérateur. Je l'utilise fréquemment pour incorporer un message "d'utilisation" dans 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
C'est mieux que d'écrire un tas de echo
déclarations car le texte hérédoc est formaté exactement comme il s'imprime à l'écran. De plus, il est plus facile de gérer les espaces blancs, les citations, la redirection et l'interpolation variable dans ce contexte. Notez, par exemple, que j'ai utilisé des crochets dans le message d'utilisation sans avoir à faire quoi que ce soit d'intelligent pour empêcher le shell d'essayer de les utiliser pour la redirection d'E / S.
Si vous voulez faire des choses comme ça sur Windows, vous pouvez installer Cygwin et utiliser l'un de ses shells. Si vous êtes sous Windows 10, vous pouvez utiliser WSL à la place.
Notes de bas de page:
Ce lien va dans l'arborescence de documentation archivée de Windows XP. Microsoft a rompu le lien que j'utilisais précédemment lors de l'archivage de ces documents, donc au cas où ils le briseraient à nouveau, voici une référence tierce de sauvegarde.
Le seul autre cmd.exe
document de référence que je connaisse sur microsoft.com est le PDF des commandes Windows (4,9 Mo, 948 pages) qui ne fait guère plus que fournir une référence pour la plupart (!) Des commandes externes intégrées et fournies par Microsoft vous pouvez donner à l' cmd
invite. Ce PDF est incomplet sur deux bases. Premièrement, et le plus pertinent ici, il n'y a pas de discussion combinée sur le fonctionnement de la redirection dans le cmd.exe
shell; il n'y a même pas de discussion sur la grammaire du shell. En second lieu , la liste des commandes du PDF est incomplète: la première chose que je me trouvais à cocher est couvert: diskpart
.
Je crois que tout cela découle des tentatives claires de Microsoft de remplacer cmd.exe
par PowerShell , qui durent depuis de nombreuses années maintenant. Dans la dernière mise à jour de Windows 10 au moment de la rédaction de ce document, ils ont pris de nouvelles mesures pour masquer l'existence decmd.exe
, bien qu'elle ne soit pas encore complètement disparue.
Il convient de noter que PowerShell ne prend également pas en charge un <<
opérateur de redirection . Ni - dans une triste régression des deux shells Unix et cmd.exe
- ne prend-il en charge la <
redirection!
La manière canonique de démarrer un document ici est comme je l'ai écrit ci-dessus, sans espace entre le <<
et le mot délimiteur. Mon souvenir flou est que toutes les utilisations des documents ici que j'ai vus dans les scripts shell se font également de cette façon. La spécification POSIX pour here-documents utilise également ce style dans ses exemples.
Cependant, une lecture attentive des autres parties de la spécification POSIX.1-2008 révèle qu'il est légal de mettre un certain nombre d'espaces ou de tabulations entre le <<
et le mot délimiteur. Voir en particulier les règles de reconnaissance de jetons 7 et 10 , la définition de io_here
dans la grammaire du shell et la définition de la classe de caractères "vierge" .
Voilà comment vous documentez un shell. Prenez des notes, Microsoft. ;)
Test ici sur Bash 4 et ksh93
confirme que cela fonctionne comme prévu.
Il y a
>
et>>
mais seulement<
, il n'y a pas<<
Source: http://ss64.com/nt/syntax-redirection.html
la source
>
écrit dans un NOUVEAU fichier.>>
ajoute à un fichier<
lit à partir d'un fichier|
envoie une sortie de commandes dans l'entrée d'une autre commandeVoir ici pour une liste La saisie de% ^ dans cmd.exe est-elle un œuf de Pâques Windows?
Depuis que cela a été publié, cela a été ajouté.
la source