The Execution Environment The execution environment of centos-art.sh script is organized in four levels. The first level is the shell environment, the second level is the command environment, the third level is the common functions environment and, finally, the fourth level which contains the specific function environment, as described in . In this context, child environments inherit definitions (e.g., variables and functions) from their parent environments making possible to logically organize the script in a way that needs can be isolated one another to follow the paradigm proposed by Unix developers at Bell Labs when felt that programs should do one thing well. The execution environment The execution environment +-----------------------------------------------------+ | Shell environment | +---|-------------------|-----------------|-----------+ . |-- TCAR_WORKDIR |-- TCAR_BRAND |-- EDITOR . . |-- LANG |-- HOME |-- PATH . . `-- centos-art.sh `-- TMPDIR `-- ... . . +---|-----------------------------------------+ . . | Command environment | . . +---|---------------|----------------|--------+ . . . |-- CLI_NAME |-- CLI_VERSION `-- ... . . . . |-- CLI_FUNCDIR `-- CLI_BASEDIR . . . . `-- cli() . . . . +---|-----------------------------------+ . . . . | Common functions environment | . . . . +---|------------------------|----------+ . . . . . |-- cli_printMessage() |-- ... . . . . . . |-- cli_getFilesList() |-- ... . . . . . . `-- render() `-- ... . . . . . . +---|---------------------------+ . . . . . . | Specific function environment | . . . . . . +-------------------------------+ . . . . . ......................................... . . . ............................................... . ....................................................... The Shell Environment The centos-art.sh script uses the following shell environment variables: PATH The PATH environment variable is specific to the operating system and provides search paths for command execution. By default, the centos-art.sh script links executable scripts from the ~/bin directory which is one of the locations used as search path in this variable. This is how we create the centos-art command from the centos-art.sh script inside your working copy. This variable is not initialized inside the centos-art.sh script. Instead, the value set in ~/.bash_profile file is used. EDITOR The EDITOR environment variable is specific to the operating system and provides the path to your default text editor. The centos-art.sh script uses the default text editor to edit subversion pre-commit messages, translation files, documentation files, script files, and similar text-based files. Possible values for this variable are: /usr/bin/vim /usr/bin/emacs /usr/bin/nano In case none of these values is set for the EDITOR environment variable inside ~/.bash_profile, the centos-art.sh script uses /usr/bin/vim as default text editor. This is the text editor installed by default in &TCD;. TEXTDOMAIN The TEXTDOMAIN environment variable is specific to the operating system and provides the domain name of that application we are producing translation messages for. This variable, in combination with TEXTDOMAINDIR, is used by gettext to find out the location of translation messages. In the very specific case of centos-art.sh script we use the centos-art.sh name as domain name. This variable is initialized inside the centos-art.sh script, so if you set it outside it (e.g., in ~/.bash_profile) the value you set there will be overwritten by that one set inside centos-art.sh script, once it is executed. TEXTDOMAINDIR The TEXTDOMAINDIR environment variable is specific to the operating system and provides the absolute path to the directory containing the translation messages related to that application specified by TEXTDOMAIN environment variable. In the very specific case of centos-art.sh script we use the Locales/Scripts/Bash path as default value. This variable is initialized inside the centos-art.sh script, so if you set it outside it (e.g., in ~/.bash_profile) the value you set there will be overwritten by that one set inside centos-art.sh script, once it is executed. TMPDIR The TMPDIR environment variable is specific to the operating system and provides the absolute path to the temporal directory the centos-art.sh script will use along its execution. This variable is defined inside the centos-art.sh script itself using the mktemp command and will be unique on each script execution. Thus, you should be able to run several instances of centos-art.sh script simultaneously without any problem. When you contribute code to centos-art.sh script and need to create temporal files, do it inside the absolute path specified by this variable. This variable is redefined inside the centos-art.sh script, so if you set it outside it (e.g., in ~/.bash_profile) the value you set there will be overwritten by that one set inside centos-art.sh script, once it is executed. LANG The LANG environment variable is specific to the operating system and controls the default locale information of it. The centos-art.sh script use the LANG environment variable to determine what language to use for printing output messages from the script itself, as well as the portable objects locations that need to be updated or edited when you localize directory structures inside the working copy of &TCAR;. The LANG environment variable is initially set in the installation process of &TCD;, specifically in the Language step. Generally, there is no need to customize this variable in your personal profile. If you need to change the value of this environment variable do it through the login screen of GNOME Desktop Environment or the system-config-language command, or even resetting the variable before executing the centos-art.sh script. In addition to shell environment variables described above, the centos-art.sh script adds the following variables inside the ~/.bash_profile file to control the script behaviour in a per-user level: TCAR_WORKDIR The TCAR_WORKDIR environment variable is specific to centos-art.sh script and controls the working copy default location of &TCAR;. This is the place in your workstation where &TCAR; file system is stored for you to work with it. By default, just after installing your workstation, this variable will not be found in it and the centos-art.sh script will finish its execution with an error message if you try to execute it without any argument. This behaviour is OK because the centos-art.sh script doesn't know where you stored the working copy of &TCAR; in your workstation. In order for this variable to exist in your workstation you need to configure your workstation first, as described in . TCAR_BRAND The TCAR_BRAND environment variable is specific to centos-art.sh script and controls the brand information that identifies the content produced inside &TCAR;. The brand information is used to give name to some files inside the repository (e.g., see files under Identity/Models/Brands directory). By default, this variable takes centos as value. In case you want to change it to something else, you should consider the following implications: The centos-art.sh script will no longer be referred as such. Instead, the ${TCAR_BRAND}-art.sh name will be used. This implies that you no longer are using the centos-art.sh file we provide as part of &TCAR; and won't be able to commit changes to it. However, if you retain the same logic from centos-art.sh script in ${TCAR_WORKDIR}-art.sh, you can use common and specific functionalities provided by centos-art.sh script and commit changes to them. The files stored under Identity/Models/Brands should be named using the value of ${TCAR_BRAND} as section. If you change the value of this variable, you need to be sure the new value set does coincide with the file names you use to store brand information. The Command Environment The first file the centos-art.sh script calls is the Scripts/Bash/Functions/Commons/cli.sh file. This file initializes all variables and functions you will be able to use along the script execution environment lifetime. Such environment variables are for internal use inside the centos-art.sh script only and users shouldn't modify them to customize the script in a per-user level. Instead, to customize the script behaviour in a per-user level, you need to make use of your personal environment variables set in the ~/.bash_profile file. Once environment variables are initialized, the centos-art.sh script initializes common and specific environment functions, in that order. Common Function Environment Common function environments are stored under Scripts/Bash/Functions/Commons directory and will be available always, both for common environment functions themselves and specific environment functions. Specific Function Environments Specific function environments, on the other hand, are stored in the Scripts/Bash/Functions/${CLI_FUNCDIRNAM}/${CLI_FUNCNAME}.sh file, where: CLI_FUNCDIRNAME Is the first argument passed to centos-art.sh script with the first letter in uppercase but the rest in lowercase. For example, Render, Locale and Help are all possible values to this variable. CLI_FUNCNAME Is the first argument passed to centos-art.sh script with all letters in lowercase. For example, render, locale and help are all possible values to this variable. Specific functions environment can be written in just one file or in several files inside the same directory. Using one file to write specific functions environment is rarely seen inside the centos-art.sh script but it could happen in situations where the need you want to solve can be written in a few lines inside just one file. On the other hand, if you find yourself writing a too long file, it is convenient to logically divide it into several files. This logical division takes place using functions, which indeed create other environments where you can create and express your solutions. The order in which individual files are exported and executed inside the specific functions environments depends in the way each developer write the Scripts/Bash/Functions/${CLI_FUNCDIRNAM}/${CLI_FUNCNAME}.sh file. This is the main file inside the specific function environment and controls the kind of logical division you implement to organize the solution you need. As file name convention, the following structure for new specific functions environment is proposed: Scripts/Bash/Functions/${CLI_FUNCDIRNAM}/ |-- ${CLI_FUNCNAME}.sh `-- ${CLI_FUNCNAME}_verbSubject.sh Specific functions environment is exported after common functions environment does, so it is not possible for specific functions environment to be available inside the common functions environment, nor inside other specific functions environment, different to the one been passed as first argument to the centos-art.sh script command-line. Although, it is possible for you to call the centos-art.sh script to itself through the cli_runFnEnvironment common function environment. In , render is a specific function environment while cli_printMessage and cli_getFilesList are common function environments. Both specific and common function environments exist to standardize frequent tasks inside &TCAR;. The following sections will describe which these frequent tasks are and the way they are standardized using specific and common function environments.