2016-09-17 110 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