貓和T卹有什麼差別?

貓和T卹有什麼差別?

我正在使用 Apache,php.ini並獲得了它,因此當我使用具有該mail()功能的 PHP 文件發送電子郵件時,它會將電子郵件保存在我的電腦上,這對於測試和 Web 開發人員都有好處。這是我在以下程式碼中新增的程式碼行php.ini

sendmail_path = "cat > /home/cam/Documents/TestEmails/`date '+%Y-%m-%d - %H-%M-%S'`.eml"

這行程式碼也有效:

sendmail_path = "tee > /home/cam/Documents/TestEmails/`date '+%Y-%m-%d - %H-%M-%S'`.eml"

cat和命令之間有什麼區別tee

答案1

長話短說: cat從您傳遞給其名稱的檔案中讀取,但tee寫入它們。只有當您不向它們傳遞檔案名稱時,它們才會具有相同的效果。否則,使用teewhen youmeancat可能會覆蓋您想要讀取的文件,從而導致意外的資料遺失。

cattee當您不給他們任何文件名時,行為類似。這就是你的例子中發生的情況;命令有輸出重定向( >) 但沒有實際的命令列參數。當您確實傳遞cattee命令檔案名稱時,它們的行為彼此不同,甚至可能會在tee您打算將檔案名稱傳遞到 時意外覆蓋檔案並丟失資料cat

原因是cattee在沒有任何參數的情況下執行相同的操作,但使用檔案名稱作為參數傳遞不同的操作,可以透過考慮每個操作的行為來辨別。一般來說,他們的行為幾乎相反。cat讀取潛在的多個文件並將其輸出發送到一處,同時tee讀取一個輸入並將其發送到潛在的多個文件。

cat將其所有輸入檔的內容複製到標準輸出, 一個接一個地。這就是說它連接了文件。例如,cat x y輸出 的內容,x然後輸出 的內容y。當傳遞單一檔案名稱時,它會將該檔案的內容複製到標準輸出,然後由於沒有更多參數而停止。

當你跑步cat檔案名,預設從自己的檔案名稱讀取標準輸入。基本上,這意味著它讀取任何內容管道式的或者重定向或以其他方式在終端機中輸入的任何內容。 (另一種表達方式是,在沒有文件名的情況下,cat其行為類似於cat -, 因為cat,像其他各種命令一樣-特殊對待並用它來指定標準輸入。

球座

tee將其標準輸入的內容複製到其所有輸出文件以及它自己的標準輸出。這就是說,它的功能就像一個T 型接頭——或者更準確地說,T 字路口是您傳遞給它的名稱的輸出檔案的數量。例如,tee x讀取其輸入,將其寫入文件x,並將其寫入自己的標準輸出。tee x y讀取其輸入,將其寫入檔案x到文件y,並將其寫入自己的標準輸出。

最常見的用途tee是將其插入具有單一檔案名稱參數的管道中。例如,假設您正在將名為 的命令的輸出foo透過管道傳輸到名為 的命令的輸入bar。你可以寫foo | bar。但是,如果您還想將輸出記錄到名為 的檔案中logfile以便您可以檢查它,則可以使用foo | tee logfile | bar.

tee覆蓋您為其指定名稱的文件,除非您將選項傳遞給它-a,在這種情況下它會附加到它們。例如,要附加到該日誌而不是覆蓋它,您可以使用foo | tee -a logfile | bar.

與 不同的是cat,該tee指令不會將未取得檔名參數視為特殊情況。相反,只需將其輸入寫入全為零您為其指定名稱的文件的名稱,然後像往常一樣將其傳遞到其標準輸出。其效果是,與 一樣cattee不使用檔案名稱運行也會將標準輸入複製到標準輸出。

當您只想將標準輸入複製到標準輸出時,文化有利於 cat。

雖然您可以使用任一cattee不帶任何參數來達到此目的,但如果您使用,cat那麼人們就會知道您的意思。tee沒有爭論很好,但它看起來就像一個錯誤。有時這被描述為cat慣用語方法來做到這一點。

cat另請注意,和支援的命令列選項tee是不同的。您可能會想到這一點,因為他們大多做不同的事情,因此能夠以完全不同的方式自訂他們的行為。看man catman tee詳細信息,尤其是有關此的信息。

答案2

總結起來cat就是供閱讀(手動輸入文件)並寫入(使用>>>)到文件。只tee涉及寫入文件 - 但在同時地根據正在為其輸入提供服務的命令的輸出。

例如:

  • ping 192.168.1.xx | tee [-a] ping_report.txt

使用上面顯示的命令,您可以同時地ping查看命令的輸出該輸出將寫入ping_report.txt文件中(當然稍後會進行分析)。如果-a使用該參數,則輸入(第一個命令的輸出)將附加到檔案中ping_report.txt,否則它將用新輸入覆蓋當前內容。

相關內容