Environment
Environment variables
Environment variables are a set of variables which can be used internaly in some programs, or just as shortcuts in the terminal.
Listing environment variables
To get the list of all environment variables with their values, type env
.
Question: what’s the value of the variable HOME
Solution:
$ env LC_ALL=en_US.UTF-8 LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36: SSH_CONNECTION=10.0.2.2 51025 10.0.2.15 22 LESSCLOSE=/usr/bin/lesspipe %s %s LANG=en_US.UTF-8 XDG_SESSION_ID=11 USER=fish PWD=/data HOME=/home/fish LC_CTYPE=UTF-8 SSH_CLIENT=10.0.2.2 51025 22 SSH_TTY=/dev/pts/0 MAIL=/var/mail/fish TERM=xterm-256color SHELL=/bin/bash SHLVL=1 LOGNAME=fish XDG_RUNTIME_DIR=/run/user/1000 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games LESSOPEN=| /usr/bin/lesspipe %s OLDPWD=/ _=/usr/bin/env
From this list, we can read that
HOME
has the value/home/fish
.
Displaying a variable’s value
To display a single variable’s value, use echo
, which basically prints
a message.
So echo coucou
will simply print “coucou”, while echo $HOME
prints
the value of the HOME
variable ($HOME
refers to the value for the
HOME
variable):
$ echo $HOME
/home/fish
$ echo "This is the value of HOME: $HOME"
This is the value of HOME: /home/fish
Importantly, trying to use a environment variable that hasn’t been defined is equivalent to using a variable set to empty string:
$ echo "hello: '$SOME_UNDEFINED_ENVIRONMENT_VARIABLE'"
hello: ''
Setting/unsetting a variable value
To set an envionement varible:
$ export MY_VARIABLE=12
$ # Check the result
$ echo $MY_VARIABLE
12
To unset this environment variable, use the command unset
:
$ export FOO="I am Groot"
$ echo "FOO is: '$FOO'"
FOO is: 'I am Groot'
$ unset FOO
$ echo "FOO is: '$FOO'"
FOO is: ''
Important environment variables
The most important environment variable would be
HOME
, path to your home directory which is the place were numerous hidden files are storedPS1
, defines the look of your command-line promptPATH
, stores the list of directories where executables are to be found.
Configuring the environment
The $HOME/.bashrc
file
A file is often used to configure the environment.
This file, $HOME/.bashrc
, is read by bash
, the terminal interpreter upon
start.
Aliases
Aliases are pseudo-commands you defined as shortcuts for other commands.
As an example, you’ll probably want to list a directory’s content and getting
file sizes quite often.
We saw in chapter Manipulating files and directories
that the command for that is ls -lh
.
A way to get faster at typing this command is by creating an alias, i.e. a
shorter pseudo-command that will do the same thing.
The command to create an alias is…alias
:
$ # Create an alias for ls -lh
$ alias ll='ls -lh'
$ # Now, typing 'll' as the same effect as 'ls -lh'
Setting global environment varialbles
To set an environment variable value on a global level, the command to use
is export
.
For example, a current practice is to store some executables in your home
directory, more precisely in $HOME/.local/bin
.
To append this directory to the list of directories where executable should
be looked for, type: export PATH=$HOME/.local/bin:$PATH