【问题标题】:Command paths as variables in shell scripts命令路径作为 shell 脚本中的变量
【发布时间】:2011-01-15 09:12:37
【问题描述】:

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

【问题讨论】:

    标签: shell path scripting


    【解决方案1】:

    我认为最后一个最好。如果您不导出它,PATH 更改对于您的脚本调用程序将不可见,并且您可能不希望它可见。

    【讨论】:

    • 即使你导出它也只会影响子进程,除非用户source是脚本而不是运行它。
    【解决方案2】:

    我认为第一个选项是最好的。你会找到它或类似的:

    SOMEPATH=/path/to/somewhere
    EXEC_ONE=exec_foo
    EXEC_TWO=exec_bar
    
    $SOMEPATH/$EXEC_ONE --argument baz_file
    

    在许多系统脚本中。

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

    【讨论】:

    • 这里真正好的一点是关于条件的最后一点:根据您的脚本运行的系统,您可能希望选择不同的可执行文件来使用。
    猜你喜欢
    • 2015-04-19
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2012-02-15
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多