Where to set environment variables in Linux? [SOLVED]


Written by - Deepak Prasad

In the rapidly evolving world of software development, environment variables play a crucial role in streamlining and customizing the behavior of applications across various platforms. As developers, it's essential to understand the intricacies of these variables and their ideal placement. If you've ever wondered "where to set environment variables?" then this article is your go-to resource. In the following sections, we will dive deep into the intricacies of environment variables, discuss the importance of choosing the right location, and explore the various ways to set them across different operating systems and development environments. So, buckle up and get ready for a comprehensive guide on mastering the art of setting environment variables in the most efficient and effective manner.

 

Different methods to set environment variables in Linux

There are several ways using which a user can set environment variables in Linux, here are some some of common methods:

  1. Using the export command in the terminal
  2. Setting variables in the .bashrc, .bash_profile, or .profile file
  3. Using the env command in the terminal
  4. Setting variables in the /etc/environment file
  5. Setting variables in the /etc/profile or /etc/profile.d/ scripts
  6. Using the set command in the terminal
  7. Setting variables in the /etc/bash.bashrc file (system-wide for bash shell)

Now let's deep dive into each of these methods and understand their usage in more detail

 

1. Using the export command in the terminal

The export command allows you to set an environment variable temporarily within the current shell session. It is a straightforward method to quickly set or modify a variable. The changes from export command are non-persistent and will be available only on the local terminal where the command was executed.

You must use this method for temporary settings, as the variables will be lost once the shell session is closed.

Example:

export API_KEY="your_api_key"

This example sets the variable API_KEY to "your_api_key" only in the current terminal session.

 

2. Setting variables in the .bashrc, .bash_profile, or .profile file

Setting variables in the .bashrc, .bash_profile, or .profile file involves adding environment variable declarations to one of these configuration files. These files are used by the shell to set up the user's environment when a new shell session is started. Here's an explanation of each file and their differences:

  1. .bashrc: This file is executed whenever a new interactive non-login shell session is started for a user using the Bash shell. Typically, it contains configurations, aliases, and functions specific to the interactive use of the shell. Adding environment variables to this file makes them available in every new non-login interactive shell session for the user.
  2. .bash_profile: This file is executed when a user starts a new login shell session using the Bash shell. It is typically used for configurations that should only be applied once per session, such as setting environment variables or running scripts. Adding environment variables to this file makes them available in every new login shell session for the user. If .bash_profile does not exist, .profile is used as a fallback.
  3. .profile: This file is executed when a user starts a new login shell session and is not specific to the Bash shell. It is used by various other shells like Bourne, Korn, and POSIX-compatible shells. If .bash_profile does not exist for a user using the Bash shell, .profile will be executed instead. Adding environment variables to this file makes them available in every new login shell session for the user, regardless of the shell being used.

When setting environment variables in these files, it's common to use the export command, which makes the variable available to the current shell session and any child processes spawned from it. Here's an example of how to add an environment variable to each of these files:

For .bashrc:

echo 'export API_KEY="your_api_key"' >> ~/.bashrc

For .bash_profile:

echo 'export API_KEY="your_api_key"' >> ~/.bash_profile

For .profile:

echo 'export API_KEY="your_api_key"' >> ~/.profile

After adding the environment variable to the appropriate file, you'll need to restart or open a new shell session for the changes to take effect. Alternatively, you can source the file in the current shell session by running source ~/.bashrc, source ~/.bash_profile, or source ~/.profile, depending on the file you've modified.

 

3. Using the env command in the terminal

The env command is a versatile utility that allows you to run a command in a modified environment. It is often used to set environment variables temporarily for a specific command execution without affecting the current shell session or other processes. This can be useful for testing, debugging, or running a command with a specific environment configuration.

Environment variables set using the env command are only applied to the specific command being executed and do not persist beyond that. Variables set using this method only affect the command being executed and do not impact the current shell session or other processes.

env API_KEY="your_api_key" some_command

In this example, the API_KEY variable is set to "your_api_key" only for the duration of some_command. Once the command has finished executing, the variable is no longer set in the environment. This method is useful for testing, debugging, or running a command with a specific environment without affecting the rest of your system.

 

4. Setting variables in the /etc/environment file

The /etc/environment file is a system-wide configuration file that contains environment variables that should be available to all users and processes on the system. This file is not a script, so it only allows variable assignments in the format KEY=VALUE, without the export command. Environment variables set in the /etc/environment file are available across sessions and system reboots. Variables set in this file affect all users and processes on the system, ensuring a consistent environment for all.

Example:

echo 'API_KEY="your_api_key"' | sudo tee -a /etc/environment

In this example, the API_KEY variable is set to "your_api_key" in the /etc/environment file. This makes the variable available system-wide to all users and processes. To apply the changes, you'll need to log out and log back in, or you can use the source command to apply the changes in the current shell session: source /etc/environment. Keep in mind that the source command is not suitable for non-shell processes; it's mostly for testing purposes in the current shell session.

Both the env command and the /etc/environment file provide ways to set environment variables, with the key difference being their scope and persistence. The env command sets variables temporarily for a specific command, while the /etc/environment file sets variables system-wide, persisting across sessions and system reboots.

 

5. Setting variables in the /etc/profile or /etc/profile.d/ scripts

The /etc/profile file and the scripts in the /etc/profile.d/ directory are used to configure the environment for all users when they start a login shell session. By placing environment variable declarations in these files or scripts, you can make them available system-wide to all users.

  1. /etc/profile: This file is executed for all users when they start a login shell session. It typically contains system-wide configurations and environment variables that should apply to all users. Adding environment variables to this file makes them available in every new login shell session for all users.
  2. /etc/profile.d/: This directory contains scripts that are executed for all users when they start a login shell session. Creating custom scripts in this directory for specific applications or sets of variables helps keep the environment configuration organized and separate from other global settings.

Variables set in these files or scripts will be available across sessions and system reboots. It affect all users on the system, ensuring a consistent environment.

echo 'export API_KEY="your_api_key"' | sudo tee -a /etc/profile.d/custom_env.sh

In this example, a new script called custom_env.sh is created in the /etc/profile.d/ directory, and the API_KEY variable is set to "your_api_key". The variable will be available system-wide to all users when they start a login shell session.

When setting environment variables in these files or scripts, it's common to use the export command, which makes the variable available to the current shell session and any child processes spawned from it.

After adding the environment variable to the /etc/profile file or a script in the /etc/profile.d/ directory, you'll need to restart or open a new shell session for the changes to take effect. Alternatively, you can source the file in the current shell session by running source /etc/profile or source /etc/profile.d/custom_env.sh, depending on the file you've modified.

 

6. Using the set command in the terminal

The set command is a built-in shell command that can be used to set environment variables within the current shell session. While the set command can be used to set environment variables, it is less common and not recommended compared to the export command, which is the standard way to set environment variables in the shell.

Environment variables set using the set command are only available for the current shell session and will be lost when the terminal is closed. Current terminal session only. Variables set using the set command are only available within the current shell session and are not passed to child processes or other shell sessions.

set API_KEY="your_api_key"

In this example, the API_KEY variable is set to "your_api_key" only in the current terminal session using the set command. However, since the set command does not export the variable to the environment, the variable will not be available to other processes or child processes spawned from the current shell session.

It is important to note that the set command is not the preferred way to set environment variables in the shell due to its limitations. Using the export command is the recommended approach, as it ensures that the environment variables are properly exported to the current shell session and any child processes:

export API_KEY="your_api_key"

By using the export command, you ensure that the environment variable is available not only within the current shell session but also to any child processes or scripts that are run from the current shell session.

 

7. Using /etc/bash.bashrc for system-wide changes

The /etc/bash.bashrc file is a system-wide configuration file for the Bash shell. It is executed whenever a new interactive non-login shell session is started for any user using the Bash shell. This file typically contains system-wide configurations, aliases, and functions specific to the interactive use of the shell. Adding environment variables to this file makes them available to all users in every new non-login interactive shell session using the Bash shell.

Variables set in this file are available across sessions and system reboots, it affect all users of the Bash shell on the system.

When setting environment variables in the /etc/bash.bashrc file, it's common to use the export command, which makes the variable available to the current shell session and any child processes spawned from it.

Example:

Suppose you want to set the JAVA_HOME variable system-wide for all users of the Bash shell. You can add the following lines to the /etc/bash.bashrc file:

export JAVA_HOME="/usr/lib/jvm/java-11-openjdk"
export PATH="$PATH:$JAVA_HOME/bin"

In this example, the JAVA_HOME variable is set to the path of the Java installation, and the bin directory of JAVA_HOME is added to the PATH variable. As a result, all users of the Bash shell will have access to the Java commands in their non-login interactive shell sessions.

After modifying the /etc/bash.bashrc file, you'll need to restart or open a new shell session for the changes to take effect. Alternatively, you can source the file in the current shell session by running source /etc/bash.bashrc, which will apply the changes immediately.

It's important to note that changes made to /etc/bash.bashrc affect all users on the system, so you should be cautious when modifying this file. If you need to set environment variables for individual users, it's better to use the user-specific configuration files, such as ~/.bashrc or ~/.profile.

 

How to decide where to set environment variables?

  • export command in the terminal: Choose when you need to set environment variables temporarily for the current shell session, mainly for testing or debugging.
  • ~/.bashrc, ~/.bash_profile, or ~/.profile: Choose when you need to set user-specific environment variables that should persist across sessions and apply to login and non-login shell sessions.
  • /etc/bash.bashrc: Choose when you need to set system-wide environment variables for all users of the Bash shell in interactive non-login shell sessions.
  • /etc/profile or /etc/profile.d/: Choose when you need to set system-wide environment variables for all users during login shell sessions, keeping configurations organized using custom scripts.
  • env command in the terminal: Choose when you need to set environment variables temporarily for a specific command execution without affecting the current shell session or other processes.
  • /etc/environment: Choose when you need to set system-wide environment variables that persist across sessions and reboots, affecting all users and processes on the system.

 

Summary

In Linux, determining where to set environment variables depends on factors such as scope, persistence, and the target audience (system-wide or user-specific). There are several methods to set environment variables, each with its use cases and benefits. To summarize, the seven primary methods for setting environment variables in Linux are:

  • Using the export command in the terminal for temporary, session-specific variables.
  • Modifying user-specific shell configuration files, such as ~/.bashrc, ~/.bash_profile, or ~/.profile, for persistent user-specific variables.
  • Editing the /etc/bash.bashrc file for system-wide variables affecting all users of the Bash shell in interactive non-login shell sessions.
  • Utilizing the /etc/profile file or creating custom scripts in the /etc/profile.d/ directory for system-wide variables during login shell sessions.
  • Employing the env command in the terminal for temporary, command-specific variables.
  • Adding variables to the /etc/environment file for persistent, system-wide variables affecting all users and processes.

 

Views: 72

Deepak Prasad

He is the founder of GoLinuxCloud and brings over a decade of expertise in Linux, Python, Go, Laravel, DevOps, Kubernetes, Git, Shell scripting, OpenShift, AWS, Networking, and Security. With extensive experience, he excels in various domains, from development to DevOps, Networking, and Security, ensuring robust and efficient solutions for diverse projects. You can reach out to him on his LinkedIn profile or join on Facebook page.

Can't find what you're searching for? Let us assist you.

Enter your query below, and we'll provide instant results tailored to your needs.

If my articles on GoLinuxCloud has helped you, kindly consider buying me a coffee as a token of appreciation.

Buy GoLinuxCloud a Coffee

For any other feedbacks or questions you can send mail to admin@golinuxcloud.com

Thank You for your support!!

Leave a Comment