在UNIX中重写带有硬编码变量的文件SHell

时间:2016-07-12 13:12:32

标签: shell unix

我有一个在UNIX Shell脚本中作为参数(--override)调用的属性文件(myDataflow.properties) - 见下文。

source ./myShell.properties

$DR_HOME/bin/dr -cp $CP_PLUGIN -Xmx64g --engine parallelism=1 --runjson $WORKFLOW_DIR/myDataflow.dr --overridefile myDataflow.properties >> $LOG_FILE

不幸的是,此处调用的程序必须在属性文件中对变量进行硬编码。但是我希望能够使用我的" myShell.properties"中的变量。 " myDataflow.properties"中的文件或环境变量文件,以便我可以轻松地将我的脚本移动到新环境。

例如,myDataflow.properties文件设置以下变量:

DATAFLOW.url=jdbc:ingres://someserver01.local:VW7/mydb

但是我想使用名为" MYDBURL"的变量。从myShell.properties读入,以便myDataflow.properties文件看起来像这样:

DATAFLOW.url=$MYDBURL

由于我无法解决这个DATAFLOW.url变量必须硬编码的事实,我正在寻找一种方法来读取带有非硬编码变量的myDataflow.properties文件,并将其写入具有硬编码的新文件变量 - 使用myShell.properties文件设置。然后,我可以在尝试运行myDataflow.dr时调用此新文件。

我希望一切都有道理。任何帮助或指示都将非常感激。

谢谢,

保罗。

1 个答案:

答案 0 :(得分:2)

所以我的想法是逐行读取myDataflow.properties,进行替换,并写出替换的行。正确?

假设shell变量eval 'echo $current_line' >>hardcodedDataflow.properties 从要扩展的属性文件中保存一个原始行。然后你可以使用

echo ${(e)current_line} >>hardcodedDataflow.properties

此解决方案适用于sh / bash / ksh。如果您对在Zsh下运行shell脚本感到满意,那么您可以更简单地完成它:

{{1}}