Tim Holloway wrote:The easy way to do it is to note that a Java properties file has the same format as a basic shell script.
However, there's a trick to it. If you just run the properties file like so:
sh appl.properties
The assignments will be made at the sub-level, then discarded when the properties file (script) ends execution.
So to get the properties in a calling script, you need to use the "source" command:
. appl.properties
Note that the space after the initial dot is very important!
To reference shell variable assignments, you use the "$" to indicate variable substitution.
So, to put it all together:
This solution is good because it's simple, but it will only work if you have Java properties file that doesn't have any property names or values that have special characters (to shell) in them. For example, if there is a property with a '.' in the name, then this solution won't work. That's the case for most Java properties files I've used, especially those used with ANT.
Here is a properties file that Java can read, but bash can't:
The second property is going to cause problems because it has a dot in the name, as well as having spaces in the value. Java and ANT can read this in just fine, but bash can't:
You're quite correct, and that page is a very useful resource.
It does, however, leave out 1 important method:
When I use a properties file in the shell, I normally only put the coarsest properties in that file (which may include paths to finer-grade properties that the Java code itself reads). So it's no particular hardship to follow that rule. For me, anyway.