2015-10-04 53 views
1

所以我就猛砸試圖此命令:慶典 - 如何<重定向輸入,然後>重定向輸出到文件

sqlite3 my_db <<! 
    .header on 
    .mode csv 
    select * from table; 
! 

它的工作原理,但我想給輸出重定向到output.csv

sqlite3 my_db <<! 
    .header on 
    .mode csv 
    select * from table; 
! > output.csv 

...但慶典似乎覺得我不會用命令來完成:

... 
$ > 
$ > 
$ > ^C 
$ 

是什麼猛砸想從我這裏?爲什麼我無法將它重定向到我的.csv文件?

感謝

回答

4

你可以這樣說:

sqlite3 my_db <<! > output.csv 
    .header on 
    .mode csv 
    select * from table; 
! 

你的最後一行應該只包含結束字符。

+0

bash如何知道不包括'> output.csv'作爲輸入被重定向的一部分? –

+0

對不起,如果這是一個非常廣泛的問題 –

+0

如果你希望> output.csv是重定向輸入的一部分,你需要像下面這樣轉義它:sqlite3 my_db < output.csv(bash將使用>作爲重定向,除非轉義) – Francois

3

如果每個使用不同的FD,Bash並不十分關心在什麼順序重定向中指定。

sqlite3 my_db > output.csv <<! 
... 
! 
+0

這很混亂。它看起來像輸入重定向到'output.csv'文件本身! –

+1

你只需要習慣重定向操作符如何工作。無論如何你都不能將一個文件重定向到另一個文件。他們總是適用於當前的命令。你甚至可以編寫'> output.cv <<! sqlite3 my_db'如果你想。 – chepner