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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.