2016-09-17 76 views
0

我有一个批处理脚本,它使用回声命令分隔批处理文件,然后调用这些文件。无论何时执行外部批处理文件命令,都会在该命令之前添加一个随机数1。这并没有发生,然后看似随机地开始发生。它会停止批处理文件中的SED命令执行正常。批处理文件在执行命令前添加1

SED -n -e "/point1/,/point2/p" test.csv > point1.csv 

SED -n -e "/point1/,/point2/p" test.csv 1>point1.csv 

任何想法输出,为什么发生这种情况?

+1

是的,您正在使用Windows,因此任何/任何理由都可以。只需安装cygwin并从shell运行你的命令 - 保存你的理智... –

+0

重定向操作符'''与'1>'等价。在没有明确提供的情况下,重定向手柄(在这种情况下是'1',意思是标准输出_STDOUT_)被回显,也'''会变成'0 <'... – aschipfl

回答

1

紧接在重定向器之前的字符是逻辑设备号。 0是stdin(通常是键盘),1是stdout(通常是控制台)2是stderr(通常也是控制台)。

语法“>文件名”实际上是“1>文件名”的简写形式,因此出现了“1”。

不幸的是,您的描述不允许您的问题被重复。 “批处理文件中的SED命令执行正常”意味着“某些批处理文件(发生器或子控制器)中的某些SED命令执行正如我所期望的(未指定)”

请提供生成命令的示例,子命令批生成,要处理的数据,预期结果和实际结果。 (不需要过度 - 只需要几行即可 - 只需编辑您的问题即可包含此数据)

+1

我解决了这个问题。原来与1>无关。 但是,我很好奇为什么Windows开始打印1,当它不这样做之前呢? – Ericvb86

+0

AFAIR,'有史以来在NT上是如此,可以追溯到1996年或之前的NT4。为了兼容DOS脚本,'1>和'>'是同义词。 '2>'不常用;可能是为了遵守理论(错误报告为stderr,标准输出为stdout)。要看到它的所有荣耀,请尝试打开'echo'并将命令显示在屏幕上。如果'x'是'1'或'echo'“12”,屏幕上会出现'echo 12 x> file',例如'echo'“12”,并且如果'x'则创建一个空文件'例如'3'。 – Magoo

+0

直接在重定向器调用此行为之前出现单个数字 - 0,1,2是唯一实现的设备,但任何数字看起来都会奇怪地起作用。因此,语法'>文件名回声12 3'通常被实现。 – Magoo