2015-05-22 61 views
-1

我有一個bash腳本是這樣的:如何避免bash腳本換行輸出

#!/bin/bash 
while true; 
do 
    (printf %s "$(date '+%A %W %Y %X')"; echo -n ", " ; printf %s "$(ps -eo pcpu,pmem,comm | grep statsd)") >> tope.txt; 
    sleep 2; 
done 

我要的是這個命令的輸出輸入到tope.txt這樣的:

Friday 20 2015 11:28:21, 0.0 0.4 /usr/libexec/systemstatsd 

但我得到的是多行輸出。 :

Friday 20 2015 11:28:21 
, 
    0.0 0.4 /usr/libexec/systemstatsd 

我該如何解決這個問題?

+1

你確定這是你正在使用的**精確**腳本嗎?因爲我不知道它會如何產生這種輸出。此外,如果這個'grep'匹配不止一個東西,你會得到你不期待的換行符。 –

回答

1

只使用一個printf語句。

while true 
do 
    printf '%s, %s\n' "$(date '+%A %W %Y %X')" \ 
         "$(ps -eo pcpu,pmem,comm | grep statsd)" >> tope.txt 
    sleep 2; 
done 

您可能還需要考慮移動文件重定向外循環,以避免在一個循環中重複open秒。

+0

我同意單一的printf方法更好,但爲什麼他的原始不工作? –

+1

@EtanReisner我不知道。 'printf(){shift;回聲「$ @」; }'?沒有理智的解釋。 – kojiro