1

I was wondering about a simple event that occurred while I was installing node version manager on my 64bit Amazon Linux 2014.09 Web Server. When I executed this install script

curl https://raw.githubusercontent.com/creationix/nvm/v0.23.3/install.sh | bash

NVM installed onto my filesytem at ~/.nvm/

What is the significance of the ~/.nvm as opposed to ~/nvm ? Specifically, what does the ' . ' mean before nvm?

This is especially important because when I execute " ll " in the ~/ folder, I do not see any files. However, when I execute cd ~/.nvm , I am taken to the ~/.nvm folder.

Also, in order to get nvm working in the terminal, I had to "source" the nvm.sh file in this way

source ~/.nvm/nvm.sh

What did this source command accomplish?

Note: everything is working, this is just a curiosity I would like to understand better so that I feel more comfortable with server configurations etc.

Thanks a bunch!

1 Answer 1

3

The character . at the beginning of the filename makes it hidden.
To see an hidden file from shell you can do ls -a (or ls -A).

Note the differences:

 .myfile.sh       # hidden file
 .   myfile.sh    # source the file myfile.sh

source (or .) are internal command of bash. You can have access to their definition with help.

With the command type you can understand if a command is a built-in shell or not.

E.g. the command type source /bin/ls will answer

source is a shell builtin
/bin/ls is /bin/ls

Then you can ask to the system information about the commands respectively with help or man.


From help source you can read

source: source filename [arguments]
Execute commands from a file in the current shell. Read and execute commands from FILENAME in the current shell. The entries in $PATH are used to find the directory containing FILENAME. If any ARGUMENTS are supplied, they become the positional parameters when FILENAME is executed.

From man ls

-a, --all
do not ignore entries starting with .

12
  • Is there a command for making a file un-hidden besides " cp -Rf ~/.file/ ~/file/ ? Will a file being hidden / un-hidden effect its functionality?
    – deusofnull
    Feb 18, 2015 at 15:05
  • I didn't understand fully. If you do cp -Rf ~/.file/ ~/file/ you will copy the directory named .file and all hidden or not subdirectories in the directory named file if it exists, else in your home (~). Instead if file is a file you will receive as answer an error cp: impossible .... .file/ is not a directory
    – Hastur
    Feb 18, 2015 at 15:17
  • Yeah, file was just a place holder. In this instance, the command would be cp -Rf ~/.nvm/ ~/nvm/ Would this change the functionality of nvm if you "source" it after this move?
    – deusofnull
    Feb 18, 2015 at 15:35
  • About the action of source, give it a look to this. To source is like to execute all the script as you were writing that commands in the present shell. You question should be: what will it happens if I change the name in which is installed a script? ;) The answer is it depends from the script. It's possible you will have problem. I cannot know it from here, but for example each call with absolute path will search it in ~/.nvm/whateverelse... and not in you new directory ~/nvm/whateverelse.
    – Hastur
    Feb 18, 2015 at 15:47
  • Thanks for the link! So it is probably best to leave it in the hidden file... You rock
    – deusofnull
    Feb 18, 2015 at 15:58

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .