我正在寫一個'C'程序,使幾個調用system()來執行其他程序。在構造命令字符串時,最好是明確地給出被調用程序的完整路徑,還是隻給出可執行文件名並讓shell使用PATH環境變量來解析它的位置?依靠PATH或提供一個明確的路徑,當使用系統()
我正在調用的程序都是單個程序包的一部分,我從預處理程序定義中找到安裝目錄的路徑。給出顯式路徑似乎可以避免在多個安裝的程序共享相同名稱時可能發生的錯誤。但是,它使得構建命令字符串變得更復雜一些,如果用戶在安裝後移動程序,所有內容都會中斷。
是否有被廣泛接受的最佳實踐?
[澄清]
我使用的autoconf/Automake生成的distribuion。提供安裝目錄的預處理器定義由makefile創建。它反映了用戶在configure comamnd行或make命令行中指定的安裝目錄的選擇。儘管我使用環境變量來指定二進制文件的位置,但我認爲這一點很重要。這似乎是讓用戶重建只是爲了改變二進制文件的位置而產生的一種不必要的痛苦。
您的安裝目錄位於我的機器的錯誤位置...所以請確保用戶可以將軟件安裝在他們想要的位置,而不是您想要的位置(儘管您當然可以擁有首選位置或默認位置)。然後允許在處理中進行選擇。你可以合理地假設你自己的軟件都在同一個地方。您不能假定可選軟件在您期望的位置(儘管嘗試/ bin和/ usr/bin可能是合理的)。在我的機器上,/ usr/local是由MIS以只讀方式安裝的,並且帶有古老軟件(Perl 4去年消失!)。我使用/ usr/gnu。 – 2010-02-05 01:06:00