So, today am going to be checking more about shell, more specifically topics on Shell initialization files,variables and shell expansions.
#Shell initialization files
When a shell is opened, there are certain initialization/startup files that are read which help to setup an environment for the shell itself and the system user.
Before we get into shell initialization we need to understand the three mods of the shell when it is opened:
Interactive login
Interactive non-login
non-interactive non-login shell
non-interactive login shell
Now let's see each one in more detail
Login shell: executes under our user ID when we log in to a session.
Interactive shell: Reads commands from user input on a terminal.
Interactive Login
In this mode you login in a remote computer.
for example it can be run through:
- using ssh
Interactive non-login
In this mode you just open a terminal.
for example it can be run through:
- running /bin/bash
- running /bin/su
non-interactive non-login shell
In this mode you run a script, it only opens to execute the script and closes immediately once the script is finished.
non-interactive login shell
In this mode you run a script remotely vi ssh or telnet.
for example :
echo command | ssh server
Now that we understood the concepts of intractability and login ,we need to see the two types of shell initialization files
system-wide startup files
user-specific startup files
system-wide startup files: are global configuration that apply to all users in the system and are located in the /etc directory.
Some of them are :
- /etc/profiles: it stores system-wide environment configurations and startup programs for login setup.
On some systems this file holds pointers to other configuration files such as:
- /etc/inputrc: to configure the command line bell-style.
- /etc/profile.d directory: contain system-wide behavior of specific program configuration
- /etc/bashrc or /etc/bash.bashrc: it stores system-wide functions and aliases including other configurations that apply to all system users.
wuser-specific startup files: are store configurations that apply to a single user on the system and located in the users home directory as dot files.
Some of them in there process are :
.bash_profile : stores user specific environment and startup programs configurations.
.bashrc : Stores user-specific aliases and functions
.bash_login : Contains specific configurations that are normally only executed when you log in to the system. When the ~/.bash_profile is absent, this file will be read by bash
.profiles : In the absence of ~/.bash_profile and ~/.bash_login, ~/.profile is read. It can hold the same configurations, which are then also accessible by other shells.
.bash_history : Bash maintains a history of commands that have been entered by a user on the system. This list of commands is kept in a user’s home directory in the ~/.bash_history file.
.bash_logout : it’s not used for shell startup, but stores user specific instructions for the logout procedure. It is read and executed when a user exits from an interactive login shell.
Tip: to see the login process use this Video
Tip: for more info on this info
#Variables
A variable is an abstract storage location paired with an associated symbolic name.
A shell variable is a variable that is available only to the current shell.
An environment variable is available system wide and can be used by other applications on the system.
Bash keeps a list of two types of variables:
Global variables
Local variables
Global variables: are variables that are available to all Bash scripts on your system, we use the commands env or printenv to display environment variables.
Local variables: are variables that can only be used within the script (or shell) in which they're defined..
To create a shell variable we use the following command
NAME='VALUE'
export : we can use the export command to export variables to the child-processes.
to view all the exported variables ,we use the command
export -p
And to export the variables, we use the command
export NAME='VALUE'
Reserved variable are set or used by Bash, but other shells do not normally treat them specially.
Some examples of reserved variable are:
HOME : The current user's home directory; the default for the cd built-in. The value of this variable is also used by tilde expansion.
PATH : A colon-separated list of directories in which the shell looks for commands.
PS1 : The primary prompt string. The default value is "'\s-\v\$ '".
#Expansion
Expansion is the process of Performed upon the text before it carries out our command.
There are many kinds of Expansions performed, some of them are:
Pathname Expansion: is mechanism by which wildcards work.
Tilde(~) Expansion: When used at the beginning of a word, it expands into the home directory of the current user.
Arithmetic Expansion: a mechanism to perform arithmetic on the shell.
$((expression))
To see all arithmetic expansion read this Docum
Brace Expansion: We use the expression in the brace to generate multiple text strings.
Parameter Expansion: the use of variables to expand.
This are some of the expansions used Linux
Command Substitution: is able to output a command as an expansion.
Tip: for more info on expansion read article
alias
alias is a linux command used to create custom made linux commands.
alias [alias-name[=string]...]
Tip: for more info on alias read alias or use the command man alias
Top comments (2)
When you talk about "global variables" being available in "all shells" if you use
export
, that's not really the case. You can open two terminals, for example, and export whateve r you like - it won't appear in the other one's environment. Usingexport
only makes environment variables available to _sub_shells.Hey, saw the review you suggested and you are right. when opening two terminals and using export on one of them, will only affect the child process of the one and it wont affect the other one.
Thanks for the review :)