我正在尝试开发命令行Node.js应用程序以运行应用程序的自动化测试。本应用程序依赖于许多环境变量来运行。在“安装”和“启动”步骤之后,需要获取一个环境文件来设置环境并开始工作。我的Node.js应用程序还遵循相同的步骤(安装和启动守护程序也是测试自动化的一部分)。第三步,用户将在终端上执行
$ . ./batchenv primer
它将在会话中提供一堆变量,随后的任务将在其中运行。
在Node应用程序中,我正在做
sh.exec('. ./batchenv primer')
但这是我看到的错误
Setting primer Subsystem environment
/home/ymk/TESTPATH2/nod/batchenv: line 60:
source': is a special builtin
exec: /home/ymk/TESTPATH2/nod/batchenv: line 60:
source': is a special builtin
batchenv文件基本上是一个shell脚本,可以导出许多环境变量,但是中间有一个source': is a special builtin
exec: /home/ymk/TESTPATH2/nod/batchenv: line 60:
块,看起来像..
if..fi
PS1="[`basename $EBMHOME`] # "; export PS1
if [ $# -eq 1 ]
then
subsysname=$1
grep "^$subsysname=" $EBMHOME/.install > $DEVNULL 2>&1
if [ $? -eq 0 ]
then
setupfile=`grep "^$subsysname=" $EBMHOME/.install | cut -f2 -d'='`
if [ -f $setupfile ]
then
echo "Setting $subsysname Subsystem environment"
function setenv
{
export "$1"="$2"
}
function source
{
. "$1"
}
. $setupfile
if [ -f ${setupfile}_usr ]
then
. ${setupfile}_usr
fi
unset -f setenv
unset -f source
PS1="[`basename $EBMHOME`/$subsysname] # "; export PS1
EBMSYS=$subsysname; export EBMSYS
else
echo ""
echo "ERROR. Setup file for $subsysname Subsystem not found"
echo ""
fi
fi
fi
似乎与shelljs.exec
有问题(在正常的shell中,此脚本可以正常运行)。
function source
模块,但这意味着在Node应用程序启动时就加载env vars。我需要随时/在执行过程中将一堆变量注入到我的底层shell中。另外,我不确定dotenv
是否能够处理dotenv
块。