2010-02-10 184 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