2017-02-25 54 views
1

我一直在試圖輸出命令像這樣的文件:回聲不會輸出多行

echo `who | cut -d' ' -f1 | sort | uniq` > users.txt 

users.txt內容是在一行上。

但是,如果我剛執行這樣的命令:

who | cut -d' ' -f1 | sort | uniq 

輸出是多行。

如果我使用echo輸出這樣的命令:

echo `who | cut -d' ' -f1 | sort | uniq` 

我坐上1路輸出。

這是怎麼回事?如何將此命令的輸出寫入多行文件?

任何幫助,高度讚賞。

編輯:

由於一些意見,我意識到,我並不需要回聲,我可以輸出這樣的:

who | cut -d' ' -f1 | sort | uniq > users.txt 
+2

這不會解決你的問題,但如果你想輸出去到一個文件,爲什麼打擾'回聲'部分?只要刪除反引號和回聲。 –

+0

爲什麼不只是做'誰' cut -d''-f1 |排序| uniq >> users.txt'? –

+0

@EricRenouf哎呀,我很笨!我認爲它只適用於回聲。非常感謝! – Erik

回答

5

其實,echo將工作於多行字符串就好了,如果您實際上通過防止發生分詞而提供多行字符串。你可以通過在雙引號中加入命令替換來阻止單詞拆分,但不能擴展。

這將工作(雖然它是無用地詳細):

echo "`who | cut -d' ' -f1 | sort | uniq`" > users.txt 

當然,這裏的合適的解決方案是避免命令替換(反引號,相當於內部$()包圍)如在其它建議答案,但有很多情況下使用帶引號的命令替換(即將參數傳遞給除echo以外的命令)很有用。

+1

這應該是被接受的答案。 – codeforester

3

出現這種情況的原因是結果該命令正在通過bash處理的分詞階段傳遞。所有由IFS中的任何字符分隔的部分將被分隔成不同的單詞,因此您將以每個名稱作爲echo的單個參數結束。

如前所述,如果您只是希望輸入命令進入文件,echo通常會妨礙您的工作,而這不是必需的。您可以在任何命令的輸出重定向到一個文件,而不僅僅是echo,所以你可以只重定向的最後一個命令的輸出在管像

who | cut -d' ' -f1 | sort | uniq > users.txt 
1

假設你只排序,以幫助該uniq的選項時,awk將是一個更好的選擇:

who | awk '!_[$1]++{print $1}' > users.txt