- How to list all variables names and their current values?
- 11 Answers 11
- How to Print Environment Variables in Linux
- What are Environment Variables?
- Print Environment Variables in Linux
- Using printenev Command
- Using echo Command
- Using env Command
- Using declare Command
- Using set Command
- Wrapping up
- How to list all Linux environment variables including LD_LIBRARY_PATH
- 3 Answers 3
- Related
- Hot Network Questions
- Subscribe to RSS
How to list all variables names and their current values?
How to list all variables names and their current values? Including not only $HOME , $PWD etc but any other you have defined.
You’ve accepted an incorrect answer. «printenv» only gives you the environment variables. If you truly want all variables currently declared in your shell, use «declare -p» or «typeset -p».
11 Answers 11
For bash: (the standard shell in Ubuntu)
Enter the following command in a terminal to print all the environment variables:
For further information about this command, read the printenv man page.
To show a list including the «shell variables» you can enter the next command:
This will show you not only the shell variables, but the environment variables too.
For more information related with this topic read:
For zsh: (an advanced shell)
Use the following command:
( setopt posixbuiltin; set; ) | less
For more information about ZSH options, see zshoptions man page.
If I go to the terminal and write MYNEWVARIABLE=Ubuntu and execute printenv it doesn’t show there. Why is that, and how do those others show up?
Probably you are seeing the difference between a shell variable and an environment variable. Try export MYNEWVARIABLE=Ubuntu and it will work as you expect.
printenv is an external command, so it only knows about (and prints) exported environment variables. set is an internal bash command, so it shows all the «shell variables» (unexported environment variables) as well as the exported environment variables.
To expand on @Rmano’s reply to @Strapakowsky. This will not work unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW , but this will unset MYNEWVARIABLE; export MYNEWVARIABLE=Ubuntu; printenv | grep MYNEW , and this will unset MYNEWVARIABLE; MYNEWVARIABLE=Ubuntu printenv | grep MYNEW . Using export says «the variable I’m setting should be part of the environment that gets passed to processes, not just a variable in this shell.» My third example says «the variable should be part of the environment that gets passed to THIS process, but not stick around afterward.»
You can see all variables with the declare builtin.
If you’re only interested in environment variables, use
Run help declare to see what the other options are.
this is far neat-er solution than POSIXLY_CORRECT=1 set and it is also worthy of mention that declare is alias (in that context) for typeset , another bash builtin.
@maoizm If you want only the variable names and nothing else, it’s easier to use compgen for that. compgen -e .
I know that this question is quite old and answered, but I think I can add a bit of useful information.
In all the methods described above, the procedure that is suggested is:
The problem of these solutions are that you are seeing the environment variables of the shell that is running into the terminal. You are not seeing the environment variables available to an application run, for example, directly by the graphic interface.
This is noticeable if, for example, you use your ~/.profile , or .bashrc , or .zshenv (depending on your shell) to modify the environment variables — like the classic addition of directories to the path.
To see the environment variables available to the application started directly in the graphic environment, you can do the following (in Gnome Shell, I am sure there is an equivalent method in all the other DE):
(Or, if you do not have xterm , gnome-terminal — bash —noprofile —norc — thanks to @Mike Nakis for the comment).
You now have a terminal with a shell that did not add any environment variables. You can use env here to list all your environment variables:
Obviously the new shell will have the environment variables added by the system files, but that variables should be available (by inheritance) to all programs in the system anyway.
I am posting this because it’s the fourth time I have to search this trick again, checking my .pam_environment file. So now I will find it faster (and in the process, I hope helping someone else. )
How to Print Environment Variables in Linux
Wondering what environment variables are set on your current shell? Learn how to print environment variables in Linux.
Environment variables are specific to certain environments. A generic answer, right?
But really, those are the variables that are just specific to your current system environment such as the currently logged-in user will be stored inside the «USER» variable.
Still confused? no worries. I will walk you through a brief understanding of environment variables and then jump to various ways to print them.
What are Environment Variables?
Nope, it’s not related to your Desktop Environment.
One of the most basic environment variables that you encounter on a daily basis is Hostname. So have you ever wondered why it’s always written in all caps?
Because most of the environment variables are pre-defined by the system and are global variables so you’ll encounter them often written in all caps.
So why use environment variables in the first place?
Suppose you are a programmer and your code needs to have access to your database key which should never be shared in public.
So what options do you have while sharing the entire code on Git? Wrap the database key to the environment variable.
This way you can set instructions on Git as «if you want to make this code work, interchange this variable with your database key.»
Of course, this was the one way of using environment variables. So let’s have a look at some common environment variables in Linux.
Environment Variable | Description |
---|---|
HOME | Shows home directory for the current user |
HOSTNAME | Contains Hostname of your system |
UID | Stores unique ID of the user |
SHELL | Shows the path to the shell which is being used currently |
BASH_VERSION | Contains version currently used bash instance |
HISTFILE | Path of the file where the history of commands is saved |
TERM | Shows the type of log-in terminal you’re using |
PATH | Shows path of commands and directories are separated by columns |
Print Environment Variables in Linux
There are various ways through which you can print environment variables in Linux and I’ll try to cover each of them. So let’s start with the easiest one.
Using printenev Command
The printenv utility is used to print environment variables for the current shell.
Suppose I want to print the value of USERNAME using printenv so my command will be as follows:
Similarly, you can also use the printenv utility to print more than one environment variable by separating them with .
So how about printing the value of HOME and USERNAME at once using printenv?
First, it’ll print the home directory of the currently logged-in user and in the second line, the hostname will be there.
But what if you are looking for a way by which you can print each environment variable available in the current shell?
You can easily accomplish this by executing the printenv command without any options or arguments whatsoever.
Using echo Command
If you’ve been using Linux for a while, the chances of using this method to print environment variables are quite high (even if you were unaware that it’s not an environment variable).
Now, let me show you how you’re supposed to print the value of USERNAME with echo:
But what if you want to print multiple environment variables using echo? just follow the given syntax:
So how about printing values of HOME, USERNAME, and HOSTNAME all at once using echo?
echo -e "$USERNAME \n$HOME \n$HOSTNAME"
Using env Command
The env command is generally used by shell scripts to launch the correct interpreter but you can also use the env command to list available environment variables.
The env command if applied without any arguments and options, will print all the available environment variables.
But what if you want to get the value of a specific environment variable? you can easily filter results with the grep command.
For demonstration, I’ll be printing out the value of HOME with the echo command:
Using declare Command
The declare command is used to declare and print the value of variables in the shell.
Like any other example shown above, you can use declare without any argument and will bring the list of available variables.
Previously, I showed you how you can use the grep command to filter results but what if you want to filter more than one result?
First, let’s have a look at the syntax for filtering multiple environment variables:
For example, let’s print the value of HOSTNAME and USERNAME:
declare | grep 'HOSTNAME\|USERNAME'
Using set Command
Generally, the set command is used to set and unset flags in the shell so that you determine the exact behavior for the upcoming process.
But you can also use the set command to print environment variables for the current shell.
To print each environment variable, use the given command:
You can use the same approach used in the above method to filter results from the set command.
But still, let’s look at a simple example using the grep command to print multiple environment variables.
set | grep 'HISTFILESIZE\|HISTFILE\|GNOME_SHELL_SESSION_MODE'
Wrapping up
Though there are various methods for printing environment variables, I’d highly suggest you use the first method the syntax is the least complicated in terms of filtering specific variables.
And if you are still confused, the comments section is open to you.
How to list all Linux environment variables including LD_LIBRARY_PATH
How to list all the environment variables in Linux? When I type the command env or printenv it gives me lots of variables, but some variables like LD_LIBRARY_PATH and PKG_CONFIG don’t show up in this list. I want to type a command that list all the environment variables including this variables ( LD_LIBRARY_PATH and PKG_CONFIG )
3 Answers 3
env does list all environment variables.
If LD_LIBRARY_PATH is not there, then that variable was not declared; or was declared but not export ed, so that child processes do not inherit it.
If you are setting LD_LIBRARY_PATH in your shell start-up files, like .bash_profile or .bashrc make sure it is exported:
export LD_LIBRARY_PATH=/usr/local/lib:$
This will modify the variable.
To print it, type: echo $LD_LIBRARY_PATH and it should show the above value.
If you’re seeing nothing when you print that, then the variable might not be set.
The question in fact is a good question. when run env or printenv , the output will be the system environment, but LD_LIBRARY_PATH is not belong to.
For example, if you set a=1 , you can’t show it by env . Same as LD_LIBRARY_PATH, it is used by ld.so only(ld. so – this little program that starts all your applications)
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
Site design / logo © 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA . rev 2023.7.12.43529
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.