永久解決方案:文件,字元串 w/o n 混合到命令行
文件不包含換行符終止符。
文件的最後一行與命令提示符中的使用者名混合在一起。
文件:
line 1
測試:
user /: cat file line 1user /:
建議的解決方案是:在文件中添加一個新的行終止符。
這個解決方案怎麼能被認為是正確的呢?
這意味著將來如果沒有新的行終止符,儲存文件可能會破壞我們的心情。
邏輯會建議..不要相信任何東西。但要糾正自己。
因此,如果我想正確的話.. 我絕不應該允許我的使用者名出現在某個字元串的末尾,無論它是否有新的行終止符。
我不應該指望他們。
我應該是我自己的實體。
是否有替代解決方案來確保我的使用者名永遠不會成為“無換行符”文件或字元串的受害者?
也許解決方案不存在,因為它會使其他東西失去功能,例如“尾巴”等?
但必須有一些邏輯。
尋找一些邏輯。
這個解決方案怎麼能被認為是正確的呢?
因為 的目的
cat
其實不是為了顯示文件。這是一個副作用。的目的
cat
是連接文件(因此得名***)****。*它通過依次讀取每個文件並將每個文件的內容輸出到其標準輸出來做到這一點,如果需要,可以反過來將其重定向。它通常用於
cat
簡單地顯示文件的內容,這是因為預設情況下,程序的標準輸出與終端相關聯。您還可以使用專用尋呼機(例如less
或其較早的兄弟more
)來查看文件,因為尋呼機旨在用於查看文件。如果
cat
用換行符終止其輸出或每個文件的內容,這將違反其長期契約。它對於實際連接文件不再有用;如果您要獲取一個大文件,將其拆分為多個部分,然後使用這樣的修改重新連接這些部分,cat
則結果將與您開始時不同。請記住,UNIX 的哲學是讓每個工具都做一些小事,把它做好,並且以這樣一種方式來做,即不同的工具可以組合成更大的上下文。這就是為什麼我可以對遠端主機執行 ssh 之類的操作來執行命令,將 ssh 會話的輸出通過管道傳輸到本地工具(awk、perl、grep 等)以按摩輸出,然後通過管道傳輸結果例如,
lpr
獲取硬拷貝列印輸出或less
通過來回滾動的能力進行瀏覽。使用工具的所有標準輸出到標準輸入,其中每個工具只做一件事,大多數簡單工具(以及許多不那麼簡單的工具)要麼預設遵循此模式,要麼可以使用適當的命令使其遵循該模式線參數。是否有替代解決方案來確保我的使用者名永遠不會成為“無換行符”文件或字元串的受害者?
是的當然。將提示設置為以換行符開頭,如下所示。
$ printf 'hello' > $TMP/hello $ PS1='\u \W: ' michael ~: cat $TMP/hello hellomichael ~: PS1='\n\u \W: ' michael ~: cat $TMP/hello hello michael ~: