- How to list all variables names and their current values?
- 11 Answers 11
- Bash Print all Environment Variables
- Set Environment Variable Value
- Print All Environment Variables Using Env
- Print All Environment Variables Using printenv
- Conclusion
- About the author
- Omar Farooq
- 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. )
Bash Print all Environment Variables
Environment variables are a collection of dynamic specified values kept inside the machine that has been utilized by programs running in terminals or subshells in Ubuntu and Linux platforms. The environment variable, in basic terms, is an attribute with a title and a value. Environment variables involve changing the way a system functions as well as the behavior of the device’s programs. The environment variable can hold data such as the regular word processor or search engine, the route to executable documents, the machine locale, and keypad layout preferences, among other things.
Set Environment Variable Value
You need to understand that the environment variables are initialized the same as the other variables in a programming language are initialized, i.e., bash variables. Although, the title of an environment variable is always case-sensitive, i.e., it must be uppercase. More than two values can be assigned to an environment variable using the colon “:”.
Here is a simple general syntax of initializing an environment variable. The set built-in command has been widely known to set the values of environment variables. If you use it without any argument or any set flag, it will make your shell display all the environment variables, as you can see from the image below. The common examples of “set” built-in are “set –x” to expand and display, “set –e” to quit the program upon encountering any non-zero status, “set –u” and “set –o” to display an error when it founds a variable with no set value, “set –n” to avoid executing the commands and many more.
Print All Environment Variables Using Env
Let’s start using different commands in the shell to print the environment variables. Before that, launch your console application using the “Ctrl+Alt+T” on the Ubuntu 20.04 desktop. The very first method to display all the environment variables is using the “env” command in the shell. But, it will only display the currently active environment variables of the system.
You can also pass some arguments in it to modify the output. We have used the simple “env” command to display all the current environment variables in our shell as per the output shown.
Print All Environment Variables Using printenv
Let’s see another example to print all the environment variables in the shell. This time we have been using the “printenv” command in the shell to do so. The “printenv” command displays the currently active environment variables and the previously specified environment variables in the shell.
You can see the output of using the “printenv” command to display all the environment variables in the shell as per the snapshot below. We have got a lot of environment variables along with their assigned values, i.e., shell variables, display variables, authentication variables, and a lot more, as demonstrated from the image.
You can also use the same command with the keywords “more” and “less”. More commands will be helpful when you want to see more when needed. While the less command will automatically show fewer environment variables on your shell screen to avoid inconvenience. The commands for more and less display are stated as follows:
The more clear view for the output of the “more” command of printing environment variables is shown in the image below. Tap the “Enter” key to explore more variables.
The printenv command is very handy when it comes to transferring its variable data into other files. This means we can also transfer all the environment variables and their values to some bash file using the “printenv” command. You have to use the greater than sign after the “printenv” keyword along with the name of a file where the data of variables will be stored.
After doing this, you can see that the file will have all the environment variables. The output is the same for displaying the content of a file using the “cat” command and the “printenv” command in the shell.
On the other hand, you can also use the arguments within the “printenv” command to make it specific. Let’s say, if you want to check the values for the environment variable “HOME” in the shell, you have to mention it in the “printenv” command with the “grep” keyword. If the variable named “HOME” exists in the system, it will display it on the shell. As you can see, it displayed the “HOME” variable and its value, i.e., path in the shell.
Let’s check for some other environment variables. Let say check for the folder “tmp” using the “grep” keyword. The folder “tmp” belongs to the variable “SESSION_MANAGER” in our system.
Now, let’s check about the “bin” folder that is widely used in the system. Upon running the command, we have got 4 environment variables in return, showing that it is a part of all those environment variables of the Ubuntu 20.04 system.
To check for the variable that doesn’t even exist in your system leads to an empty result. As the system has no environment variable for a folder or file “new”.
You can also use another command to display all the variables found in your system, i.e., not only the environment variables. The declare command can be used for this purpose along with the “-p” flag within the query.
If you only want to display the environment variables in your shell, you can also do that by declaring a command. You have to declare the “-xp” flag instead of the “-p” flag, as shown in the image. You can have a look at the output that displays only the environment variables.
Conclusion
This guide has been designed for all the bash users of the Linux system despite their learning capability. This is because all the examples implemented within this article are very simple and well-explained to make it understandable for every type of user.
About the author
Omar Farooq
Hello Readers, I am Omar and I have been writing technical articles from last decade. You can check out my writing pieces.
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.17.43537
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.