Setting and Using Linux Environment Variables
Traducciones al EspañolEstamos traduciendo nuestros guías y tutoriales al Español. Es posible que usted esté viendo una traducción generada automáticamente. Estamos trabajando con traductores profesionales para verificar las traducciones de nuestro sitio web. Este proyecto es un trabajo en curso.
Your Linux shell has access to an environment that stores configuration values and other information in environment variables. Accessing these variables can be useful when working with shell commands. You can also set environment variables that can be accessed and used by your scripts, and applications. This guide walks you through the fundamentals of accessing, creating, and using environment variables.
Before You Begin
If you are using a Linode to run through this guide’s examples, familiarize yourself with our Getting Started with Linode guide, and complete the steps for setting your Linode’s hostname and timezone.
This guide uses
sudowherever possible. Complete the sections of our How to Securing Your Server guide to create a standard user account, harden SSH access, and remove unnecessary network services.
NoteThis guide is written for a non-root user. Commands that require elevated privileges are prefixed with
sudo. If you’re not familiar with the
sudocommand, see the Users and Groups guide.
What Are Environment Variables?
Environment variables are name-value pairs used by a system’s shell to define default shell properties. Some of these include your shell’s home directory, prompt, and current working directory. Environment variables are inherited by sub-shells, and are available to applications, and daemons. You can also create and set your own environment variables.
Environment Variable Scope
A variable’s scope refers to the parts of a program or environment that can access a given variable. An environment variable in Linux can have global or local scope.
Globally scoped environment variables are accessible from anywhere in a particular environment bound by the terminal.
Locally scoped environment variables can only be accessed by the terminal that defined the variable. It cannot be accessed by any program or script.
Differences Between Environment and Shell Variables
Standard UNIX variables are classified into two categories—environment variables and shell variables.
An environment variable is available and valid system-wide.
Environment variables can be used by scripts and applications.
These variables are inherited by all spawned child processes and shells.
By convention, environment variables are given upper case names.
Shell variables are available only in the current shell session.
These variables are useful when you need to store values temporarily.
Each shell such as
bash, has its own set of internal shell variables.
This guide focuses on environment variables with references to shell variables.
Commonly Used (Global) Environment Variables
The following environment variables are commonly available to most popular Linux system’s by default.
USER: The currently logged-in user name.
HOME: The path to the current user’s home directory.
SHELL: The pathname of the current user’s shell.
PATH: A list of directories that the shell searches for executable files.
PWD: The path to your current working directory (PWD stands for “Print Working Directory”).
UID: The current user’s unique identifier.
Follow the steps below to view your system’s values for the environment variables listed above.
Create a new file named
variables.shand include the contents of the example file.
- File: ~/variables.sh
1 2 3 4 5 6 7 8 9 10 11
#! /bin/sh echo 'The current logged-in User is:' $USER echo 'Home directory of the current user is:' $HOME echo 'Pathname of the current user'"'"'s shell is:' $SHELL echo 'The Present Working Directory is:' $PWD echo 'Users unique identifier is:' $UID
Make the script executable using the following command:
chmod +x variables.sh
Run the script to view its output:
The script displays the following output:
The current logged-in User is: example_user Home directory of the current user is: /home/example_user Pathname of the current user's shell is: /bin/bash The Present Working Directory is: /home/example_user Users unique identifier is: 1000
How to Get and Set Environment Variables
List All Environment Variables
To view a list of all (global) environment variables available to the current user, use the following command :
You can pipe the output of the
printenvcommand to the
lessutility to page through all your environment variables.
printenv | less
To get a more comprehensive list of (global and local) environment variables, use the
set command. This list includes environment variables, shell variables, and functions.
Get the Value of an Environment Variable
To see the value of a single environment variable, use the following command and replace
VARIABLE_NAME with your own variable.
For example, you can pass the
HOME variable as an argument to the command.
Alternatively, you can use the
echo command, and prepend the variable’s name with the
$ symbol to output the value of the variable. This works for both environment variables and shell variables.
How to Set Environment Variables
To set the value of an existing environment variable type the variable name followed by the value you want to assign.
NoteIf the environment variable does not already exist, it is created as a shell variable. You can promote the shell variable to an environment variable by exporting it. See the How to Export Environment Variables section for details.
set command to view the variable and its value.
set | grep EXAMPLE_VARIABLE
How to Export Environment Variables
You can turn a shell variable into an environment variable using the
export command. The example below creates a variable called
EXAMPLE_VARIABLE and assigns it the value
new example value.
export EXAMPLE_VARIABLE='new example value'
printenv to confirm that the variable is now a part of your environment.
New Example value
How to Assign Multiple Values to an Environment Variable
To assign multiple values to an environment variable use a list. Each value should be separated by a colon.
You can also append new items to lists. The example appends the
example-directory located in the user’s home directory to the
PATH environment variable.
PATHis a default environment variable that defines directories where your shell can look for executables. This variable allows you to run an executable without having to specify its path.
How to Unset an Environment Variable
unset command removes an environment or shell variable from the session. This example removes
Persisting Environment Variables
You can set an environment variable permanently between shell sessions and users. To do so, set your environment variable in your shell configuration file using the
The example in this section uses the Bash shell, since it is the default shell on most popular Linux distributions. If you are using any other shell, modify the steps accordingly.
SHELL environment variable to check which shell you are using:
Set a persistent environment variable for a single user:
Edit the user’s
.bashrc file located in their home directory and add a line that exports the environment variable that you want to persist. The example line appends the user’s
/home/username/example-directory to the
- File: ~/.bashrc
Set a persistent environment variable for all system users:
Create a new shell script file (
.sh) in the
/etc/profile.d directory. Add a line to your example file that exports the environment variable that you want to persist across all system users.
- File: /etc/profile.d/custom.sh
export EXAMPLE_VARIABLE='example value'
NoteYou can also add environment variables to the
/etc/bashrcfiles. However, your variables may not persist after upgrades to your shell package.
Using Environment Variables in Application Development
In application development, you can use environment variables to distinguish between application environments and to store configuration information required by your app. The example below uses environment variables to distinguish between test and production application environments and to store URLs for each environment’s corresponding API.
.sh file to store your app’s configuration values as environment variables. You can store the file in the
/etc/profile.d/ directory to make the configurations available to all system users. The
APP_ENV variable can then act as a switch in your application code.
- File: /etc/profile.d/app-config-vars.sh
1 2 3 4 5
export APP_ENV="TEST" export APP_TEST_API="https://api.test.example.com/v1/customers" export APP_PROD_API="https://api.example.com/v1/customers"
Ensure you reload your system’s
profilefile to give your terminal session access to your new environment variables:
Create a new file named
main.py with the example content below. The example application reads the
APP_ENV variable and fetches the configurations from the appropriate variables. This method makes the application environment agnostic — the application responds appropriately depending on its current environment.
- File: main.py
1 2 3 4 5 6 7 8 9
import os app_environ = "APP_" + os.environ["APP_ENV"] app_api = os.environ[app_environ + "_API"] print('Your current environment: ' + os.environ['APP_ENV']) print('Your environment's API URL' + app_api)
Execute the file to view which environment and API URL is currently detected by the example application.
Your current environment: TEST Your APIs URL: https://api.test.example.com/v1/customers
Depending on your system’s configuration and installed version of Python, you may need to adjust the above command to explicitly use Python 3.
When you need to change to the production environment, update the
APP_ENV variable to
main,py file and your output should now indicate that you are using the configurations for your production environment.
Your current environment: PROD Your APIs URL: https://api.example.com/v1/customers
The information covered in this guide should help you start using environment variables on your Linux server. They can be strong tools for scripting, developing applications, and having a better time working in the shell overall.
This page was originally published on