我知道它>>
的用途,它将所有消息写入文件而不是屏幕。我想<<
反过来做,我试了一下,收到一条消息:<< was unexpected at this time.
请告诉我其用途<<
和用法。
答案1
标准 Windows 命令 shell — cmd.exe
— 不使用<<
运算符根本.¹
单个<
表示“将文件读入标准输入“到,但是连续cmd.exe
两个字符对来说毫无意义,因此会出现错误。<
cmd.exe
运营<<
商是对所有主要类型的Unix 命令 shell,它用于此处文件:²
$ 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 上做这样的事情,你可以安装赛格威并使用其中一个 shell。如果你使用的是 Windows 10,你可以使用西弗吉尼亚海岸反而。
脚注:
该链接进入已归档的 Windows XP 文档树。微软在归档这些文档时破坏了我之前使用的链接,因此,如果他们再次破坏它,这里是备用的第三方参考。
据我所知,microsoft.com 上唯一的其他
cmd.exe
参考资料是Windows 命令 PDF(4.9 MB,948 页),它只提供了您可以在提示符下给出的大多数内置和 Microsoft 提供的外部命令的参考cmd
。此 PDF 在两个方面不完整。首先,也是与此最相关的,没有综合讨论重定向在 shell 中的工作方式cmd.exe
;甚至没有讨论 shell 语法。其次,PDF 的命令列表不完整:我碰巧检查的第一件事没有涵盖:diskpart
。我相信这一切都源于微软试图
cmd.exe
用电源外壳,这种情况已经持续了很多年了。在撰写本文时,在最新的 Windows 10 更新中,他们已经采取进一步措施隐藏存在cmd.exe
,尽管它还没有完全消失。值得一提的是PowerShell 也不支持
<<
重定向运算符。也不 — — 与 Unix shell 相比,这是一个令人遗憾的倒退 —cmd.exe
— 它不支持<
重定向!开始 here-document 的规范方式就像我上面写的那样,在
<<
和分隔符单词之间没有空格。我模糊的记得,我在 shell 脚本中看到的所有 here-document 的使用也都是这样进行的。此处文档的 POSIX 规范在其示例中也使用了这种风格。然而,仔细阅读POSIX.1-2008 规范表明在 和分隔符之间放置一定数量的空格或制表符是合法的
<<
。具体来说,请参见令牌识别规则 7 和 10io_here
,在的定义shell 语法,以及定义“空白”字符类。那就是如何记录 shell。微软,记下来。;)
在 Bash 4 上进行测试并
ksh93
确认其按预期工作。
答案2
有,>
但>>
没有<
<<
command < filename Type a text file and pass the text to command
答案3
>
写入新文件。
>>
附加到文件
<
从文件读取
|
将一个命令的输出发送到另一个命令的输入
请参阅此处查看列表在 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.