Easy-to-follow video tutorials help you learn software, creative, and business skills.Become a member
Environment variables can be very helpful in allowing us to customize how the Unix history works. There are five different variables that we can configure. Before we start looking at them, let's first start by just using history -c to clear out our existing history so that everything we work with we'll be able to easily identify what's new and what's been added to the history, and then let's do nano .bashrc and right below where we set our path I am just going to paste in the lines for the history and then we can talk to them and that way you don't have to sit and watch me type.
So notice that on each of them I'm exporting it and here is the variable name. HISTSIZE, HIST being short for history, HISTSIZE= and then a number. This is the number of commands that history will remember. By default it will remember 500. If you want more or less, well this is how you change it. You set the variable here. Once we get to that maximum number then the oldest command will drop off the top and it will still just add the newest command at the bottom. So essentially what we are looking at would be the 500 most recent commands.
In my case the 10,000 most recent commands. I have given a very large number so it just keeps growing and growing and growing until I manually clear it. We can also set the maximum size that the history file has allowed to become, using HISTFILESIZE. Here I've said that it can be one million k that's a very large number. But you could restrict it to something smaller if you wanted. If you said I never want that file to get larger than this certain amount, once it gets to that amount well then it will truncate the oldest entries in the file and leave the newest ones, so that it gets back under that file limit again.
The next one is HISTTIME format. What this one does is it provides a timestamp next to each of your history entries, letting you know when they were added. It does that by using a string here and a set of special format codes. These are known as the strftime format. I call that string from time. Other people may pronounce it as string f time. I have given you a reasonable example here, but you can also go out on the Internet and look up these formatting codes, if you want to use something different. The next one is HISTCONTROL and you can see the value for that is ignoreboth.
Well what does that mean ignoreboth? Where there are actually three values that we could put there. We could put ignoredups, ignorespace or ignoreboth and I'm telling it I wanted to do both, both dups and space. ignoredups means that we don't want history to record the same line multiple times. Try to ignore the duplicates when you can. ignorespace tells history not to record any line that begins with a space. Why would we need that? Well it's a little trick that a lot of people like to use. Let's say that there is a single Unix command that you're about to enter, but it has something in it like a password that you don't want to be saved in your history where someone might see the password later.
Well if you just start the line with a space and then type the command, Unix will still interpret the command as normal but history will ignore it and it won't show up in your history file. So it's a very convenient way just be able to hide a single line from your history. We also can ignore certain commands all the time and we do that with HISTIGNORE. Here we provide a colon-separated list of all the commands that we want history to ignore all the time. For example history. I don't need to record in my history the fact that I typed history. Another common one is PWD.
Every time I've checked to see what directory I am in I don't need to have that in my history, so I can leave that out. You typically want to leave the things to get ignored to be a very simple list. Either put nothing in there at all or keep it very very simple. I've put mostly here informational things. Things that are just sort of I might check you know just to see where I am at, to see what's going on. I don't want to record those in my histories. But things like copying and moving and stuff, I want to have those in my history because I may want to go back and use them again or edit them or to see the fact that I took those actions. All right remember that you can pause the movie to copy all of this down.
Once you've get it in there, let's use Ctrl+X to exit, save the changes, and let's also then run, using source .bashrc will read in those changes as well. So now all those variables have been defined and let's just type a few different commands. Let's try echo "Hello" and let's try ls. Let's try echo "Hello" again and one more time and let's just space echo, we'll do 'secret', let's say we have a secret password in there, ls -la, and last of all pwd.
Okay, now that we have done all those, let's clear the screen. Let's type history and let's see what's in there. My nano that I did to edit the bashrc, the source where I ran those changes, and the first echo made it in there and that's it. That's because ls, ls -a, pwd and history were all hidden those are all things that I told them that they should ignore those commands. The duplicates were kept out, right, so I only saw echo "Hello" one time and also the echo 'secret' that I did with a space at the beginning got left out as well.
So you can see how we are able to leave those out. You also can see that now I have this time format here at the beginning, telling me when each of these different commands was entered. I have a timestamp there. As far as the history size and history file size, you'll just have to sort of take my word for it or you can set those to really low numbers so that you can actually see how those work as well. Now I want to show you want other thing though. Let's try ls -al, right. I added ls -la in that ignore list, but now let's type our history and notice that it did get added there.
So the things that we type under HISTIGNORE have to be exact, even the options. For example if I do history, pipe it through tail -8, now I see the last 8 commands that were run including this history command that I just ran, right. So history by itself doesn't get added, but history piped through this other thing does get added. So again all of these changes are really just about configuring your working environment to be the way that you like it to be. We have now seen a few of the most useful configurations that you can make with the environment variables, but beyond these I think it's more important for you to understand the overall concept of how you go about setting environment variables and making them available every time that you log in, by putting them in your bashrc file.
Other Unix programs you encounter in the future are also going to make use of shell variables and when they do, now you know how to set them.
Get unlimited access to all courses for just $25/month.Become a member
Access exercise files from a button right under the course name.
Search within course videos and transcripts, and jump right to the results.
Remove icons showing you already watched videos if you want to start over.
Make the video wide, narrow, full-screen, or pop the player out of the page into its own window.
Click on text in the transcript to jump to that spot in the video. As the video plays, the relevant spot in the transcript will be highlighted.