I have a number of Bash and Perl scripts which are unrelated in functionality, but are related in that they work within the same project. The fact that they work in the same project means that I commonly specify the same directories, the same project specific commands, the same keywords at the top of every script.
Currently, this has not bitten me, but I understand that it would be easier to have all of these values in one place, then if something changes I can change a value once and have the various scripts pick up on those changes.
The question is - how is best to declare these values? A single Perl script that is 'required' in each script would require less changes to the Perl scripts, though doesn't provide a solution to the Bash script. A configuration file using a "key=value" format would perhaps be more universal, but requires each script to parse the configuration and has the potential to introduce issues. Is there a better alternative? Using environmental variables? Or a Bash specific way that Perl can easily execute and interpret?
Define environments variables : user level : in your ~/.profile or ~/.bash_profile or ~/.bash_login or ~/.bashrc system level : in /etc/profile or /etc/bash.bashrc or /etc/environment
For example add tow lines foreach variable :
To read this variable in bash script :
in perl script :
When you run a shell script, it's done in a sub-shell so it cannot affect the parent shell's environment. So when you declare a variable as
key=value
its scope is limited to the sub-shell context. You want to source the script by doing:This executes it in the context of the current shell, not as a sub shell.
From the bash man page:
Also you can use the
export
command to create a global environment variable.export
governs which variables will be available to new processes, so if you saythen
$BAR
will be available in the environment of myscript2.sh, but$FOO
will not.