Answers:
标准的Windows命令外壳- cmd.exe
-不使用<<
运营商在所有 .¹
单个对<
表示“将文件读入标准输入 ” cmd.exe
,但是两个<
字符对于背对背是没有意义的cmd.exe
,因此会给出您得到的错误。
该<<
运算符对于Unix命令外壳的所有主要类型都有意义,在此用于此处文档:²
$ some-command <<END
blah blah blah
blah blah
blah blah blah blah blah
END
这三行被发送到some-command
其标准输入。
这对于将大量文本发送到命令中而不用先将其写入文件(如您必须与<
操作员一样)很有用。我经常使用它在脚本中嵌入“使用”消息:
#!/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
这比编写一堆echo
语句要好,因为Heredoc文本的格式设置与打印到屏幕上时完全相同。此外,在这种情况下,更容易处理空格,引用,重定向和变量插值。请注意,例如,我在用法消息中使用了尖括号,而不必做任何巧妙的事情来防止shell尝试将其用于I / O重定向。
如果要在Windows上执行此类操作,则可以安装Cygwin并使用其外壳之一。如果您使用的是Windows 10,则可以改用WSL。
脚注:
该链接进入已归档的Windows XP文档树。Microsoft在归档这些文档时断开了我以前使用的链接,因此如果再次断开它,这里是备份的第三方参考。
cmd.exe
我在microsoft.com上知道的唯一其他参考资料是Windows Commands PDF(4.9 MB,948页),仅能为大多数(!)内置和Microsoft提供的外部命令提供参考。您可以在cmd
提示时给出。该PDF基于两个方面是不完整的。首先,也是最相关的,这里没有关于重定向如何在cmd.exe
Shell中工作的综合讨论。甚至没有关于外壳语法的讨论。其次,PDF的命令列表不完整:我碰巧要检查的第一件事未涵盖:diskpart
。
我相信在座的来自微软的明确尝试这个如下,以取代cmd.exe
与PowerShell中,已经已经持续了很多年。在撰写本文时,Windows 10的最新更新中,他们还采取了进一步的步骤来隐藏的存在cmd.exe
,尽管尚未完全消失。
值得注意的是,PowerShell还不支持<<
重定向运算符。同样,从Unix shell退缩之后,cmd.exe
它也不支持<
重定向!
就像我在上面写的那样,开始此处文档的规范方法是,与<<
分隔符之间没有空格。我的模糊回忆是,我在shell脚本中看到的对here-documents的所有使用也都是通过这种方式完成的。此处文档的POSIX规范在其示例中也使用此样式。
但是,仔细阅读POSIX.1-2008规范的其他部分后发现,在<<
和分隔符之间放置一定数量的空格或制表符是合法的。具体地,请参阅令牌识别规则7和10,定义io_here
在所述壳语法,和的定义的“空白”字符类。
这就是您记录壳的方法。做笔记,微软。;)
在Bash 4上进行测试,并ksh93
确认它可以按预期工作。
有>
,>>
但只有<
,没有<<
command < filename Type a text file and pass the text to command
>
写入一个新文件。
>>
附加到文件
<
从文件读取
|
将命令输出发送到另一个命令的输入中
请参阅此处的列表。在cmd.exe中键入%^是Windows复活节彩蛋吗?
自从发布以来,已经添加了它。
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.