2012-11-26 41 views
1

我有一個封閉的程序(即Intersystems'csession'Cachédb終端),它將寫入作爲參數給出的文件。它會這樣做幾次,然後返回。每次,給定的文件被覆蓋,所以最後,我只得到最後的結果...如何在bash中創建附加到另一個文件的僞文件

我有這樣的想法,它可能欺騙並給出一個特殊的僞文件作爲參數,將充當代理並將寫入的內容追加到另一個文件中。

create proxyfile as >> realfile 
cat "Hello" > proxyfile 
cat "Bye" > proxyfile 
cat realfile 
Hello 
Bye 

有沒有人認爲這可能是可行的,可能使用一個小工具?

回答

4

您可以爲此使用一個FIFO文件(命名管道)。要查看它們的工作方式,請打開兩個終端窗口。在一,做

cd /tmp 
mkfifo pipe 
tail -f pipe 

,並在其他

cd /tmp 
echo "Hello" > pipe 
echo "Bye" > pipe 

對於實際問題,讓你的應用程序寫入FIFO以及使用tail -f pipe > outputfile在後臺收集結果爲outputfile

+0

太棒了,那正是我在跳的!謝謝。 (注意強制性,它不適用於csession ...我猜CacheDB試圖以一種特定的方式處理文件給出的參數,這種方式不適合標準的Unix方案......我將打開關於學科)。 – alci

+0

@alci:然後它可能在打開之前取消鏈接文件。 –

1

您可以使用/dev/stdout作爲輸出文件,管道它的貓和標準輸出附加到文件與>>

csession /dev/stdout | cat >>realfile 

這不會覆蓋,而是附加到現有的文件。

+0

「將寫入作爲參數給出的文件」 - 所以OP不重定向標準輸出。 –

+0

爲什麼你使用'| cat >> realfile'而不是'>> realfile'?寫給'/ dev/stdout'的@larsmans就像重定向到stdout一樣。 – bfontaine

+1

@bfontaine當你使用'csession/dev/stdout >> realfile'時,程序會截斷'realfile'而不是追加它。這與'csession realfile'相同。 –

相關問題