In the previous post I wrote about different topics such as BASH_ENV, subshells or expressions. Today I’m going to talk about shell enviroment variables.
1. BASHPID
This is the PID of the current bash process. This behaviour is different from $$ in cases such a subshell where $BASHPID says the PID of the subshell, whereas $$ shows the PID of the bash holding the subshell.
$ echo $$ $BASHPID # 23353 23353
$ echo 'Subsshell' $(echo $$; echo $BASHPID)# 21060 23353
2. BASH_LINENO
Number of lines in the current script, from the beginning to the line the function was called from.
#!/bin/bash
function show_env_vars() {
echo "$FUNCNAME" # show_env_vars
echo "$BASH_LINENO" # Number on lines till show_env_vars was call (11)
echo "$LINENO" # Current line 7
}
show_env_vars
3. DIRSTACK
Array with the directories you are moving using popd and pushd builtins to add/remove directories.
# After doing some pushd
$ for i in ${DIRSTACK[@]}; do printf 'DIR: %s\n' $i; done
DIR: /tmp
DIR: /var/tmp/testing
DIR: /home/cartoon
DIR: /usr/share/doc
DIR: /var/tmp
DIR: /var/www
4. EUID and GROUPS
EUID of the current user, initialized at shell startup. This variable is read only. On the other hand GROUPS is an array of groups which the current user is member of.
for ((i=0; i < ${#GROUPS[@]}; i++)); do printf 'gid:%d\n' ${GROUPS[$i]}" ; done
gid: 1002
gid: 1001
5. Gathering OS info
Below there are some of the shell environment vars you could use, for instance if you need to check the architecture. I have not tried in Sparc yet but I would like.
HOSTNAME='Self explanatory'
HOSTTYPE='Arhcitecture i486'.
OSTYPE='Operating System where bash is running i.e: linux-gnu'
PPID='Parent process ID of the current shell'
6. Random numbers
RANDOM A random number betwwen 0 and 32767.
# Getting a random number between 0 and 99
echo "RANDOM: $(( $RANDOM % 100))
In sum, there are a wide number of shell environment variables to keep in mind if you are scripting. Next time I will post more shell vars, but focused on customizing your bash shell.