Start learning with our library of video tutorials taught by experts. Get started
Viewers: in countries Watching now:
Unix for Mac OS X Users unlocks the powerful capabilities of Unix that underlie Mac OS X, teaching how to use command-line syntax to perform common tasks such as file management, data entry, and text manipulation. The course teaches Unix from the ground up, starting with the basics of the command line and graduating to powerful, advanced tools like grep, sed, and xargs. The course shows how to enter commands in Terminal to create, move, copy, and delete files and folders; change file ownership and permissions; view and stop command and application processes; find and edit data within files; and use command-line shortcuts to speed up workflow. Exercise files accompany the course.
We first took a look at the path variable back in Chapter 5. You can jump back there if you need a quick refresher. Path is a colon delimited list of file paths that Unix uses when it's trying to locate a command that you want it to run. And we can take a look at that with echo $PATH. There you see each of the paths that it's going to check in. For example, /usr/bin and then a colon followed by the next path /bin and then a colon and so on down the line. And Unix will look in each of those directories, trying to locate a command in that order. So for example, if we type less unix_ files/lorem_ipsum.txt, then the process that Unix went through when trying to run the LESS command was to first look for it in this directory and then if it didn't find it, to look for it in this directory, and so on all the way down the line.
In this movie I want to still learn to modify our path variable using what we just learned in the last movie about setting environment variables. To begin with, let's just do it here from the command line. PATH= and we'll just use an empty string. So now we're telling it don't look in any directories when trying to find these commands. We're essentially unsetting the path. Now let's try that same command again. less unix_files/lorem_ipsum.txt. It comes and it says "Oops! less? I've never heard of it. I can't find it." Now less is still a functioning program. We didn't disable less.
What we did was we took away Unix's ability to find the command less. We can still run it if we did /usr/bin less and then unix_files/lorem_ipsum.txt, and now it still works. We just had to go ahead and specify the full path to find the command instead of having it built into our path that Unix would automatically use to look for it. So you see what the path does and you also see how you can screw yourself up if you get your path wrong. Now luckily all we have to do is reset this environment variable back to this default string and we will be all set, or as we saw in the last movie we can actually just close our window and reopen a new one, and now echo $PATH will return the original string again, because it wasn't saved between bash sessions.
Now, of course most of the time we probably do want our path variable setting to stick around, so we're going to want to put this in our bashrc file. nano .bashrc, and then in here we can do export PATH= and then whatever we want to set that value to. Obviously, we don't want to unset it, so instead let's just type in the current setting and we can use that as a starting point for making modifications. Now what kind of modifications might you want to make to the path? Well, you might want to take something out of the path. You might say, "Oh you know what? I don't want it to look in this directory anymore.
I want to just take that out of the equation." So you can make that change if you wanted. More often what we want to do is we want to control the order in which the path happens. So for example, a very common one is to say all right, let's take usr/local/bin. I'll actually copy that and use Option to shoot to the beginning of the line here, and we'll want to put that at the beginning. So now it'll look for usr/local/bin before it starts looking in those other directories. That gives me, the user, the opportunity to put a file in there. Maybe I want to run my own version of less, right? So I put my own version in usr/local/ bin and it'll get to my version before it gets to the version that's inside usr/bin.
Now we could do it this way by just declaring a new string for the path, but a more common way to do it is just to amend the existing variable by adding to it. Let me show you how we do that. Let me just use Option and I'll shoot down here to the end. Let me just erase a bit. There we are. And let's just take all of this away, all the way back to here, and then let's use $PATH. So what I am doing is I am calling the existing value of path, which is that string we just had, and I am going to use that inside my new string but put my new path at the beginning, and set that whole thing then equal to my new version of path.
It's no problem to use path both here and here. However, what is a problem is the single quotes. We have to use double quotes whenever we want it to pull in the value of this dollar sign variable. If we just use single quotes then it will take it as a literal string. it'll think we want it to look inside a directory called $PATH, which doesn't exist. What we want is we've to grab that variable, so the double quotes are very important. So we can also put our new code at the end, if we wanted it to look in usr/local/bin, after its normal places. We can put it at the end.
But I want to try and get in front of it. I want to say all right, I am not trying to add to the path to the additional places that you might check. I am trying to supersede whatever is in your additional path. A very common setting to use and one that I use in a lot of my trainings is usr/local/bin: followed by usr/local/ and then sbin and then colon and then if you have MySQL installed, usr/local/mysql/bin. So that's only if you have MySQL installed you want to do that last one but what I am saying is all right, basically checking my three main local directories where I might have put things.
And then if you can't find something there, then go look in all the additional places where you might normally look for commands. Now you may realize that actually usr/ local/bin is defined inside PATH, right? So it's actually going to be in the string twice. That's not a big deal. Don't worry about that. It's really not a major concern that it puts both of those in the path. If you really cared about it, you could put the full string or edit it out somehow. But it's perfectly acceptable to do it this way and just have it in the path twice. Let's use Ctrl+X to exit. we'll save the changes to our bashrc file.
If we just do echo $PATH now, we won't have that value because we have to run the bashrc file again or we have to close our window and open a new one. Now we try echo $PATH and now you can see that it made my changes at the beginning. So here's my directories followed by the regular path. Now at this beginner level it might not be really obvious to you why you would want to do this. But once you start actually working in Unix a lot and you start having your own programs that you start putting in these folders, you'll understand that it's an essential thing to be able to control this path variable.
Probably the most important environment variable that you can set. So it's important that you understand how it works and how to set it.
Find answers to the most frequently asked questions about Unix for Mac OS X Users.
Here are the FAQs that matched your search "":
Sorry, there are no matches for your search ""—to search again, type in another word or phrase and click search.
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.