命令路径作为shell脚本中的变量

命令路径作为shell脚本中的变量,shell,path,scripting,Shell,Path,Scripting,在shell脚本中运行外部实用程序的最佳实践是什么。例如,如果我想在多个脚本中运行'gzip',确保使用特定的gzip二进制文件,我应该将二进制文件的完整路径设置为一个变量,并在不考虑脚本的情况下使用该变量吗 GZIP=/home/me/bin/gzip $GZIP somefile $GZIP anotherfile 还是更好的做法是为每个二进制调用硬编码路径 /home/me/bin/gzip somefile /home/me/bin/gzip anotherfile 还是设定并依靠这

在shell脚本中运行外部实用程序的最佳实践是什么。例如,如果我想在多个脚本中运行'gzip',确保使用特定的gzip二进制文件,我应该将二进制文件的完整路径设置为一个变量,并在不考虑脚本的情况下使用该变量吗

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用户身份运行脚本,因此可维护性和可移植性比用户安全性更重要。

我认为最后一个是最好的。如果不导出它,则脚本调用的程序将看不到路径更改,并且您可能不希望它可见。

我认为第一个选项是最好的。您会发现它或类似的:

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

$SOMEPATH/$EXEC_ONE --argument baz_file
在许多系统脚本中


您可以使用条件测试存在性,甚至兼容性,可用选项等。,并相应地设置变量。

即使您确实导出了它,它也只会影响子进程,除非用户
源代码
的脚本而不是运行它。这里真正好的一点是关于条件的最后一点:根据脚本运行的系统,您可能希望选择不同的可执行文件来使用。