- How To – Linux Set Environment Variables Command
- Two types of shell variables
- Display current environment variables on Linux
- env command
- How to set and list environment variables in Linux using set command
- How to Set Environment Variables in Linux
- Overview
- Setting an Environment Variable
- Unsetting an Environment Variable
- Listing All Set Environment Variables
- Persisting Environment Variables for a User
- Export Environment Variable
- Setting Permanent Global Environment Variables for All Users
- Conclusion
- Environment variables
- Contents
- Utilities
- Defining variables
- Globally
- Per user
- Graphical environment
- Per session
- Examples
- Default programs
- Using pam_env
How To – Linux Set Environment Variables Command
- Configure look and feel of shell.
- Setup terminal settings depending on which terminal you’re using.
- Set the search path such as JAVA_HOME, and ORACLE_HOME.
- Create environment variables as needed by programs.
- Run commands that you want to run whenever you log in or log out.
- Set up aliases and/or shell function to automate tasks to save typing and time.
- Changing bash prompt.
- Setting shell options.
Tutorial details | |
---|---|
Difficulty level | Easy |
Root privileges | No |
Requirements | Linux |
Est. reading time | 11 minutes |
Two types of shell variables
- Environment variables (GLOBAL): Typically, end-users shouldn’t mess with Environment variables as they are available system-wide, and subshells and child processes can access them. In certain scenarios, we can modify them as per our needs. For example, we set up a system-wide path for the JAVA app or PATH for searching binaries. In almost all cases, we use the export command to define or modify environment variables.
- Shell and user-defined variables (LOCAL) : As the name suggests, these are defined by users and currently apply to the current shell session.
You can use the following commands to view and configure the environment.
Display current environment variables on Linux
The printenv command shows all or the given environment variables. Open the terminal prompt and then type:
printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep ‘APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST’
env command
The env command runs a Linux command with a modified environment. The syntax is:
Please note that If no command name is specified following the environment specifications, the resulting environment is displayed on screen. This is like specifying the printenv command as discussed earlier. For example:
How to set and list environment variables in Linux using set command
The env command/printenv command displays only the Linux shell environment variables. What if you need to see a list of all variables, including shell, environment, user-defined shell functions? Try the following set command for printing environment variables:
set
set | grep BASH
Here is what we see:
The $PATH defined the search path for commands. It is a colon-separated list of directories in which the shell looks for commands. The $PS1 defines your prompt settings. See the list of all commonly used shell variables for more information. You can display the value of a variable using the printf command or echo command:
Outputs from the last command displaying my home directory location set by the $HOME environment variable on Linux:
/home/vivek
Источник
How to Set Environment Variables in Linux
Overview
In this tutorial, you will learn how to set environment variables in Ubuntu, CentOS, Red Hat, basically any Linux distribution for a single user and globally for all users. You will also learn how to list all environment variables and how to unset (clear) existing environment variables.
Environment variables are commonly used within the Bash shell. It is also a common means of configuring services and handling web application secrets.
It is not uncommon for environment specific information, such as endpoints and passwords, for example, to be stored as environment variables on a server. They are also used to set the important directory locations for many popular packages, such as JAVA_HOME for Java.
Setting an Environment Variable
To set an environment variable the export command is used. We give the variable a name, which is what is used to access it in shell scripts and configurations and then a value to hold whatever data is needed in the variable.
For example, to set the environment variable for the home directory of a manual OpenJDK 11 installation, we would use something similar to the following.
To output the value of the environment variable from the shell, we use the echo command and prepend the variable’s name with a dollar ($) sign.
And so long as the variable has a value it will be echoed out. If no value is set then an empty line will be displayed instead.
Unsetting an Environment Variable
To unset an environment variable, which removes its existence all together, we use the unset command. Simply replace the environment variable with an empty string will not remove it, and in most cases will likely cause problems with scripts or application expecting a valid value.
To following syntax is used to unset an environment variable
For example, to unset the JAVA_HOME environment variable, we would use the following command.
Listing All Set Environment Variables
To list all environment variables, we simply use the set command without any arguments.
An example of the output would look something similar to the following, which has been truncated for brevity.
Persisting Environment Variables for a User
When an environment variable is set from the shell using the export command, its existence ends when the user’s sessions ends. This is problematic when we need the variable to persist across sessions.
To make an environment persistent for a user’s environment, we export the variable from the user’s profile script.
- Open the current user’s profile into a text editor
- Add the export command for every environment variable you want to persist.
- Save your changes.
Adding the environment variable to a user’s bash profile alone will not export it automatically. However, the variable will be exported the next time the user logs in.
To immediately apply all changes to bash_profile, use the source command.
Export Environment Variable
Export is a built-in shell command for Bash that is used to export an environment variable to allow new child processes to inherit it.
To export a environment variable you run the export command while setting the variable.
We can view a complete list of exported environment variables by running the export command without any arguments.
To view all exported variables in the current shell you use the -p flag with export.
Setting Permanent Global Environment Variables for All Users
A permanent environment variable that persists after a reboot can be created by adding it to the default profile. This profile is loaded by all users on the system, including service accounts.
All global profile settings are stored under /etc/profile. And while this file can be edited directory, it is actually recommended to store global environment variables in a directory named /etc/profile.d, where you will find a list of files that are used to set environment variables for the entire system.
- Create a new file under /etc/profile.d to store the global environment variable(s). The name of the should be contextual so others may understand its purpose. For demonstrations, we will create a permanent environment variable for HTTP_PROXY.
- Open the default profile into a text editor.
- Add new lines to export the environment variables
Conclusion
This tutorial covered how to set and unset environment variables for all Linux distributions, from Debian to Red Hat. You also learned how to set environment variables for a single user, as well as all users.
Источник
Environment variables
An environment variable is a named object that contains data used by one or more applications. In simple terms, it is a variable with a name and a value. The value of an environmental variable can for example be the location of all executable files in the file system, the default editor that should be used, or the system locale settings. Users new to Linux may often find this way of managing settings a bit unmanageable. However, environment variables provide a simple way to share configuration settings between multiple applications and processes in Linux.
Contents
Utilities
The coreutils package contains the programs printenv and env. To list the current environmental variables with values:
The env utility can be used to run a command under a modified environment. The following example will launch xterm with the environment variable EDITOR set to vim . This will not affect the global environment variable EDITOR .
The Bash builtin set allows you to change the values of shell options and set the positional parameters, or to display the names and values of shell variables. For more information, see the set builtin documentation.
Each process stores their environment in the /proc/$PID/environ file. This file contains each key value pair delimited by a nul character ( \x0 ). A more human readable format can be obtained with sed, e.g. sed ‘s:\x0:\n:g’ /proc/$PID/environ .
Defining variables
Globally
Most Linux distributions tell you to change or add environment variable definitions in /etc/profile or other locations. Keep in mind that there are also package-specific configuration files containing variable settings such as /etc/locale.conf . Be sure to maintain and manage the environment variables and pay attention to the numerous files that can contain environment variables. In principle, any shell script can be used for initializing environmental variables, but following traditional UNIX conventions, these statements should only be present in some particular files.
The following files should be used for defining global environment variables on your system: /etc/environment , /etc/profile and shell specific configuration files. Each of these files has different limitations, so you should carefully select the appropriate one for your purposes.
- /etc/environment is used by the pam_env module and is shell agnostic so scripting or glob expansion cannot be used. The file only accepts variable=value pairs. See pam_env(8) and pam_env.conf(5) for details.
- /etc/profile initializes variables for login shells only. It does, however, run scripts and can be used by all Bourne shell compatible shells.
- Shell specific configuration files — Global configuration files of your shell, initializes variables and runs scripts. For example Bash#Configuration files or Zsh#Startup/Shutdown files.
In this example, we add
/bin directory to the PATH for respective user. To do this, just put this in your preferred global environment variable config file ( /etc/profile or /etc/bash.bashrc ):
Per user
You do not always want to define an environment variable globally. For instance, you might want to add /home/my_user/bin to the PATH variable but do not want all other users on your system to have that in their PATH too. Local environment variables can be defined in many different files:
/.pam_environment is the user specific equivalent of /etc/security/pam_env.conf [1], used by pam_env module. See pam_env(8) and pam_env.conf(5) for details.
To add a directory to the PATH for local usage, put following in
To update the variable, re-login or source the file: $ source
/.bashrc etc. This means that, for example, dbus activated programs like Gnome Files will not use them by default. See Systemd/User#Environment variables.
Reading
/.pam_environment is deprecated and the feature will be removed at some point in the future.
Graphical environment
Environment variables for Xorg applications can be set in xinitrc, or in xprofile when using a display manager, for example:
The factual accuracy of this article or section is disputed.
/.config/environment.d/ on Wayland sessions is GDM-specific behavior. (Discuss in Talk:Environment variables)
Applications running on Wayland may use systemd user environment variables instead, as Wayland does not initiate any Xorg related files:
To set environment variables only for a specific application instead of the whole session, edit the application’s .desktop file. See Desktop entries#Modify environment variables for instructions.
Per session
Sometimes even stricter definitions are required. One might want to temporarily run executables from a specific directory created without having to type the absolute path to each one, or editing shell configuration files for the short time needed to run them.
In this case, you can define the PATH variable in your current session, combined with the export command. As long as you do not log out, the PATH variable will be using the temporary settings. To add a session-specific directory to PATH , issue:
Examples
The following section lists a number of common environment variables used by a Linux system and describes their values.
- DE indicates the Desktop Environment being used. xdg-open will use it to choose more user-friendly file-opener application that desktop environment provides. Some packages need to be installed to use this feature. For GNOME, that would be libgnomeAUR ; for Xfce this is exo . Recognised values of DE variable are: gnome , kde , xfce , lxde and mate .
The DE environment variable needs to be exported before starting the window manager. For example: This will make xdg-open use the more user-friendly exo-open, because it assumes it is running inside Xfce. Use exo-preferred-applications for configuring.
- DESKTOP_SESSION is similar to DE , but used in LXDE desktop environment: when DESKTOP_SESSION is set to LXDE , xdg-open will use PCManFM file associations.
- PATH contains a colon-separated list of directories in which your system looks for executable files. When a regular command (e.g. ls, systemctl or pacman) is interpreted by the shell (e.g. bash or zsh), the shell looks for an executable file with the same name as your command in the listed directories, and executes it. To run executables that are not listed in PATH , a relative or absolute path to the executable must be given, e.g. ./a.out or /bin/ls .
- HOME contains the path to the home directory of the current user. This variable can be used by applications to associate configuration files and such like with the user running it.
- PWD contains the path to your working directory.
- OLDPWD contains the path to your previous working directory, that is, the value of PWD before last cd was executed.
- TERM contains the type of the running terminal, e.g. xterm-256color . It is used by programs running in the terminal that wish to use terminal-specific capabilities.
- MAIL contains the location of incoming email. The traditional setting is /var/spool/mail/$LOGNAME .
- ftp_proxy and http_proxy contains FTP and HTTP proxy server, respectively:
- MANPATH contains a colon-separated list of directories in which man searches for the man pages.
- INFODIR contains a colon-separated list of directories in which the info command searches for the info pages, e.g., /usr/share/info:/usr/local/share/info
- TZ can be used to to set a time zone different to the system zone for a user. The zones listed in /usr/share/zoneinfo/ can be used as reference, for example TZ=»:/usr/share/zoneinfo/Pacific/Fiji» . When pointing the TZ variable to a zoneinfo file, it should start with a colon per the GNU manual.
Default programs
- SHELL contains the path to the user’s preferred shell. Note that this is not necessarily the shell that is currently running, although Bash sets this variable on startup.
- PAGER contains command to run the program used to list the contents of files, e.g., /bin/less .
- EDITOR contains the command to run the lightweight program used for editing files, e.g., /usr/bin/nano . For example, you can write an interactive switch between gedit under X or nano, in this example:
- VISUAL contains command to run the full-fledged editor that is used for more demanding tasks, such as editing mail (e.g., vi , vim, emacs etc).
- BROWSER contains the path to the web browser. Helpful to set in an interactive shell configuration file so that it may be dynamically altered depending on the availability of a graphic environment, such as X:
Using pam_env
The PAM module pam_env(8) loads the variables to be set in the environment from the following files: /etc/security/pam_env.conf , /etc/environment and
- /etc/environment must consist of simple VARIABLE=value pairs on separate lines, for example:
- /etc/security/pam_env.conf and
/.pam_environment share the same following format: @
Источник