代码之家  ›  专栏  ›  技术社区  ›  Fede E.

使用源代码加载配置文件的bash

  •  0
  • Fede E.  · 技术社区  · 7 年前

    我需要使用一个配置文件(只是有一些变量设置),它将被sh脚本使用。我正在使用source来完成,就像这样:

    cmd.config文件:

    CUSTOM_JAVA_HOME=
    JAVA_FLAGS=-server -Xmx2048M
    

    program.sh文件:

    #!/bin/sh
    if [ -f "cmd.config" ]; then
        source "cmd.config"
    fi
    
    [ -z "$CUSTOM_JAVA_HOME" ] && JAVA_BIN="java" || JAVA_BIN="$CUSTOM_JAVA_HOME""/bin/java"
    

    其思想是只在文件存在时加载它,然后使用这些变量。

    但是我总是得到:

    XXXX@Ubuntu:~/desktop/program$/program.sh直播 /program.sh:3:/program.sh:源:未找到

    然后程序开始使用默认值(不加载cmd.config)。

    我错过什么了吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Barmar    7 年前

    source 是一个 bash 扩展。如果你想用 猛击 语法,您需要使用以下命令启动脚本:

    #!/bin/bash
    

    而不是

    #!/bin/sh
    

    或者你可以用 . 而不是 来源 要执行该脚本,可以移植到所有符合POSIX的shell。

    此外,配置文件需要使用正确的语法来设置shell变量。行:

    JAVA_FLAGS=-server -Xmx2048M
    

    尝试执行名为的命令 -Xmx2048M 设置环境变量时 JAVA_FLAGS=-server . 要使整件事情成为变量的值,需要引用它:

    JAVA_FLAGS='-server -Xmx2048M'
    

    如果这些应该是环境变量而不是外壳变量,则需要导出它们:

    export JAVA_FLAGS
    
        2
  •  0
  •   Prav    7 年前

    source 函数无法加载标准文件,需要通过添加使文件成为系统文件 . 在文件名前面。

    #!/bin/bash
    if [ -f ".cmd.config" ]; then
        source ".cmd.config"
    fi
    
    [ -z "$CUSTOM_JAVA_HOME" ] && JAVA_BIN="java" || JAVA_BIN="$CUSTOM_JAVA_HOME""/bin/java"
    
    推荐文章