Bash使用源来加载配置文件

时间:2018-07-12 18:53:16

标签: bash sh

我需要使用将由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 live   ./program.sh:3:3:./program.sh:来源:找不到

然后程序使用默认值(未加载cmd.config)启动。

我想念什么吗?

2 个答案:

答案 0 :(得分:2)

sourcebash的扩展名。如果要使用bash语法,则需要使用以下命令启动脚本:

#!/bin/bash

代替

#!/bin/sh

或者您可以使用.而不是source来执行脚本,这可以移植到所有符合POSIX的shell中。

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

JAVA_FLAGS=-server -Xmx2048M

尝试在设置环境变量-Xmx2048M的同时执行名为JAVA_FLAGS=-server的命令。为了使整个事物成为变量的值,需要用引号将其引起来:

JAVA_FLAGS='-server -Xmx2048M'

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

export JAVA_FLAGS

答案 1 :(得分:0)

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"