我需要使用将由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)启动。
我想念什么吗?
答案 0 :(得分:2)
source
是bash
的扩展名。如果要使用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"