請勿讓工具程式的行為取決於調用它的名稱。 有時建立一個具有不同名稱的工具程式連結會很有用,而這不應改變它的功能。 因此,如果您將 foo 連結到 ls,則無論使用哪個名稱調用程式,其行為都應相同。
相反地,請使用執行時期選項或編譯開關,或兩者皆用,來選擇替代行為。 您也可以建置程式的兩個版本,具有不同的預設行為,並以兩個不同的名稱安裝它們。
同樣地,請勿讓命令列程式的行為取決於它作為標準輸出或標準輸入取得的輸出裝置類型。 裝置獨立性是系統設計的重要原則; 不要僅僅為了節省使用者偶爾輸入選項而妥協它。(當使用終端機時,錯誤訊息語法的變化是可以接受的,因為那是一個人們不依賴的次要問題。)
如果您認為當輸出到終端機時,一種行為最有用,而當輸出到檔案或管線時,另一種行為最有用,那麼通常最好將預設行為設定為對於輸出到終端機很有用的行為,並為另一種行為提供選項。 您也可以建置程式的兩個不同版本,並使用不同的名稱。
對於某些情況下輸出為二進制資料的程式,有一個例外。 將此類輸出傳送到終端機是無用的,並且可能會造成問題。 如果此類程式通常將其輸出傳送到標準輸出,則在這些情況下,它應偵測輸出是否為終端機,並改為給出錯誤訊息。 -f
選項應覆蓋此例外,因此允許輸出傳送到終端機。
相容性要求某些程式依賴於輸出裝置的類型。 如果 ls
或 sh
沒有以所有使用者期望的方式運作,那將是災難性的。 在某些這些情況下,我們會用一個首選的替代版本來補充程式,該版本不依賴於輸出裝置類型。 例如,我們提供了一個 dir
程式,它很像 ls
,只是它的預設輸出格式始終為多欄格式。