2010-02-10 97 views
4

在shell腳本中運行外部實用程序時的最佳做法是什麼?例如,如果我想在多個腳本中運行'gzip',以確保使用特定的gzip二進制文件,我應該使二進制變量的完整路徑,並在腳本中使用變量?作爲shell腳本中變量的命令路徑

GZIP=/home/me/bin/gzip 
$GZIP somefile 
$GZIP anotherfile 

或者是更好的做法來硬編碼每個調用二進制文件的路徑?

/home/me/bin/gzip somefile 
/home/me/bin/gzip anotherfile 

還是更好地設置和依賴路徑?

PATH=/home/me/bin:$PATH 
gzip somefile 
gzip anotherfile 

我沒有以root身份運行腳本,因此可維護性和可移植性比用戶安全性更重要。

回答

2

我認爲第一個選擇是最好的。你會發現它或類似的:

SOMEPATH=/path/to/somewhere 
EXEC_ONE=exec_foo 
EXEC_TWO=exec_bar 

$SOMEPATH/$EXEC_ONE --argument baz_file 

在許多系統腳本。

您可以使用條件來測試存在性,甚至兼容性,可用選項等,並相應地設置變量。

+0

這裏真正好的東西是關於條件的最後一點:根據你的腳本運行的是什麼系統,你可能希望選擇一個不同的可執行文件來使用。 – 2010-02-25 22:29:09

2

我認爲最後一個是最好的。如果不導出它,則PATH更改對腳本調用的程序將不可見,並且您可能不希望它可見。

+1

即使你*做*導出它只會影響子進程,除非用戶'源'是腳本而不是運行它。 – dmckee 2010-02-10 17:39:24

相關問題