On 11 Nov 2009, at 01:03, Simon Wistow wrote:
I have a small problem in that I'm trying to modify a bash script so
that currently does this
. config
# then inspect command line args
getArgs
so that you can specify the config file on the command line. Which
necessarily requires do
config_file="config"
# inspect command line args first
getArgs
. ${config_file}
however that means that anything in the config file will override
anything passed in on the command line. Which sort of defeats the
point.
Is there an easy way to say "source this config file but don't
override
any variable already set?" or some sort of standard recipe? Or amy I
going to have to write something that reads the config file line by
line, splits out any variable name left of a '=' checks to see if it's
set and then evals the line? Cos that's potentially prone to failure.
Bash does have some fairly complex substitution possibilities[0] such
as:
${foo:-bar} # If $foo exists and is not null, return $foo. If it
doesn't exist or is null, return bar.
${foo:=bar} # as above, but set foo=bar as well as returning
But I don't think any thse are ideal for your purposes, and you
probably don't want to require who ever is writing the config file to
have to do anything but "foo=bar"
So either re-process the args after you've loaded the config file, or
use different internal variables for cmd line flags and merge
afterwards.
-ash
[0] http://linux.die.net/abs-guide/parameter-substitution.html