Head
“head -c”輸出在提示之前顯示
head -c 3 sample.txt
輸出將顯示在提示中的使用者名之前。
Theuser@localhost:/home$
The
之後沒有被列印$
。為什麼我的終端會這樣做?
The
之後沒有被列印$
為什麼要呢?
head
首先列印,然後 shell 才會提示您輸入下一個命令。不過,仍然在(below)之後,將提示放在單獨的行中是有道理的The
。
head -c 3 sample.txt
列印準確The
,之後沒有換行符e
。您請求head
將 3 個字節列印到其標準輸出(即在本例中為終端),而您正好得到 3 個字節。其中沒有換行符。通常,命令(例如 from
echo
)的文本輸出以換行符結尾。當 shell 在命令終止後列印提示時,它會立即列印在換行符之後,因此您會在新行的開頭看到提示。在您的情況下, 之後沒有換行符
The
,因此當 shell 列印到終端時,提示出現在同一行。一些 shell 會檢測到何時會發生這種情況。你的外殼顯然沒有。
處理行的工具用尾隨換行符列印它們,因為這些字元實際上屬於它們各自的行。源數據中最後一行(例如
sample.txt
)不完整(即沒有尾隨換行符)的情況可以通過忽略該行或按原樣列印(沒有換行符)或通過修復(添加換行符)來處理; 這取決於工具及其實現。從
sample.txt
包含完整的行和head -n
處理行的過程中,您可以期待完整的行。但是head -c
處理字節,除非您事先知道要列印的最後一個字節是換行符,否則您不應該假設輸出的最後一行將是完整的。
echo
您可以通過在後面呼叫不帶參數來輕鬆添加換行符head
:head -c 3 sample.txt; echo
然後你的提示肯定會出現在一個單獨的行中。請記住這一換行符來自
echo
,而不是來自sample.txt
。
- 例外情況是當輸出
head
包含終端控制序列移動游標等時。我不希望這樣的序列適合三個字節,但一般來說,如果文件包含它們並且終端是否理解它們並且如果你請求足夠的字節然後終端將服從。如果發生這種情況,有可能在任何地方(或更糟)看到提示