CMD BATCH pipe / redirect / EOF signal V1
作者:互联网
-
CMD BAT 概要
windows - Command to run a .bat file - Stack Overflow -
管道Pipe:
A | B
,在A执行结束/返回/退出后,A的输出传递作为B的输入,执行B。
"在A结束后",而非实时。 -
重定向Redirect:
A > B
、C < D
,是执行前的赋值操作,传递关于输入、输出之环境(广义的参数)。- "执行前的赋值":类似于(狭义的)传递参数,不过形式不同于
Command Arg Arg2 ..
。 - "环境":类似upvalue。
- "输入、输出":默认是stdin、stdout、stderr,传递的是变量名/地址,而非值。
- "执行前的赋值":类似于(狭义的)传递参数,不过形式不同于
-
findstr
(、find
)会等待静态值参数满足后执行。"等待静态值":即,不可一边输入,一边处理。
- 当使用管道时,不存在问题,立即执行。
- 当使用重定向时,
- 如果输入流是(狭义的)文件,不存在问题,立即执行;
- 如果是输入设备(如
con
(console)终端),则等待输入完毕时,才会执行。
涉及结束输入流的问题。- "等待输入完毕":相当于Lua中的
input:read'a'
,会阻塞。
- "等待输入完毕":相当于Lua中的
-
命令行(CMD)终端设备下,
- 按键Ctrl+Z,生成[EOF](End of File) [SUB],ASCII '\026'。作为内容,显示为
^Z
。 - 按键Ctrl+D,生成[EOT](End of Transmission),ASCII '\004'。作为内容,显示为
^D
。
示例。在CMD中,
-
对
findstr
命令:>findstr "b" abc ;输入 ^d ;输入Ctrl-D abc ;输出,找到的结果 ^z ;输入Ctrl-Z,退出 >findstr "b" ac ;输入 ^d ;输入Ctrl-D(未找到,其后无输出) ^z ;输入Ctrl-Z,退出 >_
-
对
set /p var=
命令,Ctrl-D
、Ctrl-Z
都可以结束。
在Lua中,正文中的控制字符无特殊意义。
即,'\004\026\0'不产生控制作用。参见:
- command line - How to signal the end of stdin input - Unix & Linux Stack Exchange
- windows - terminating input in cmd - Stack Overflow
- command line - How to signal the end of stdin input - Unix & Linux Stack Exchange
检索关键词:cmd command batch, findstr find, stdin input, redirect pipe, read write dynamic realtime, flush refresh buffer, block wait hang, control character signal, Ctrl-D ^D, Ctrl-Z ^Z
- 按键Ctrl+Z,生成[EOF](End of File) [SUB],ASCII '\026'。作为内容,显示为
标签:redirect,findstr,EOF,Ctrl,signal,CMD,input,输入 来源: https://www.cnblogs.com/RobertL/p/16279150.html