From fddb1042f90d3c7d8e227a1e70ba368c8ebe0771 Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sun, 15 Dec 2013 13:57:15 +0100 Subject: [PATCH 1/3] Updated installers, install directory can be set using NVM_DIR, profile can be set using NVM_PROFILE and source can be set by NVM_REPO and as NVM_SOURCE for the gitless installer. --- install-gitless.sh | 62 +++++++++++++++++++++-------------------- install.sh | 69 +++++++++++++++++++++++++--------------------- 2 files changed, 69 insertions(+), 62 deletions(-) diff --git a/install-gitless.sh b/install-gitless.sh index d2ee6e6..8e9707e 100755 --- a/install-gitless.sh +++ b/install-gitless.sh @@ -1,59 +1,61 @@ #!/bin/bash +set -e + function fatalExit (){ - echo "$@" && exit 1; + echo "$@" && exit 1; } -# an alternative URL that could be used: https://github.com/creationix/nvm/tarball/master -if [ "$NVM_SOURCE" == "" ]; then - NVM_SOURCE="https://raw.github.com/creationix/nvm/master/nvm.sh" +if [ ! "$NVM_SOURCE" ]; then + NVM_SOURCE="https://raw.github.com/creationix/nvm/master/nvm.sh" fi -if [ "$NVM_DIR" == "" ]; then - NVM_DIR="$HOME/.nvm" +if [ ! "$NVM_DIR" ]; then + NVM_DIR="$HOME/.nvm" fi # Downloading to $NVM_DIR mkdir -p "$NVM_DIR" pushd "$NVM_DIR" > /dev/null echo -ne "=> Downloading... " -curl --silent "$NVM_SOURCE" -o nvm.sh || fatalExit "Failed"; +curl --silent "$NVM_SOURCE" -o nvm.sh || fatalExit "Failed downloading $NVM_SOURCE" echo "Downloaded" popd > /dev/null -# Detect profile file, .bash_profile has precedence over .profile -if [ ! -z "$1" ]; then - PROFILE="$1" -else +# Detect profile file if not specified as environment variable (eg: NVM_PROFILE=~/.myprofile). +if [ ! "$NVM_PROFILE" ]; then if [ -f "$HOME/.bash_profile" ]; then - PROFILE="$HOME/.bash_profile" + NVM_PROFILE="$HOME/.bash_profile" + elif [ -f "$HOME/.zshrc" ]; then + NVM_PROFILE="$HOME/.zshrc" elif [ -f "$HOME/.profile" ]; then - PROFILE="$HOME/.profile" + NVM_PROFILE="$HOME/.profile" fi fi -SOURCE_STR="[[ -s "$NVM_DIR/nvm.sh" ]] && . "$NVM_DIR/nvm.sh" # This loads NVM" +SOURCE_STR="[ -s $NVM_DIR/nvm.sh ] && . $NVM_DIR/nvm.sh # This loads NVM" -if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then - if [ -z $PROFILE ]; then - echo "=> Profile not found" +if [ -z "$NVM_PROFILE" ] || [ ! -f "$NVM_PROFILE" ] ; then + if [ -z $NVM_PROFILE ]; then + echo "=> Profile not found. Tried ~/.bash_profile ~/.zshrc and ~/.profile." + echo "=> Create one of them and run this script again" else - echo "=> Profile $PROFILE not found" + echo "=> Profile $NVM_PROFILE not found" + echo "=> Create it (touch $NVM_PROFILE) and run this script again" fi - echo "=> Append the following line to the correct file yourself" + echo " OR" + echo "=> Append the following line to the correct file yourself:" echo - echo "\t$SOURCE_STR" + echo -ne "\t$SOURCE_STR" echo - echo "=> Close and reopen your terminal to start using NVM" - exit -fi - -if ! grep -qc 'nvm.sh' $PROFILE; then - echo "=> Appending source string to $PROFILE" - echo "" >> "$PROFILE" - echo $SOURCE_STR >> "$PROFILE" else - echo "=> Source string already in $PROFILE" + if ! grep -qc 'nvm.sh' $NVM_PROFILE; then + echo "=> Appending source string to $NVM_PROFILE" + echo "" >> "$NVM_PROFILE" + echo $SOURCE_STR >> "$NVM_PROFILE" + else + echo "=> Source string already in $NVM_PROFILE" + fi fi -echo "=> Close and reopen your terminal to start using NVM" +echo "=> Close and reopen your terminal afterwards to start using NVM" diff --git a/install.sh b/install.sh index 8117dca..eb1a6f6 100755 --- a/install.sh +++ b/install.sh @@ -1,6 +1,14 @@ #!/bin/bash -NVM_DIR="$HOME/.nvm" +set -e + +if [ ! "$NVM_SOURCE" ]; then + NVM_SOURCE="https://github.com/creationix/nvm.git" +fi + +if [ ! "$NVM_DIR" ]; then + NVM_DIR="$HOME/.nvm" +fi if ! hash git 2>/dev/null; then echo >&2 "You need to install git - visit http://git-scm.com/downloads" @@ -11,55 +19,52 @@ fi if [ -d "$NVM_DIR" ]; then echo "=> NVM is already installed in $NVM_DIR, trying to update" echo -ne "\r=> " - cd $NVM_DIR && git pull + pushd "$NVM_DIR" > /dev/null + git pull --no-rebase origin master --quiet + popd > /dev/null else # Cloning to $NVM_DIR - git clone https://github.com/creationix/nvm.git $NVM_DIR + mkdir -p "$NVM_DIR" + git clone "$NVM_SOURCE" "$NVM_DIR" fi echo -# Detect profile file, .bash_profile has precedence over .profile -if [ ! -z "$1" ]; then - PROFILE="$1" -else +# Detect profile file if not specified as environment variable (eg: NVM_PROFILE=~/.myprofile). +if [ ! "$NVM_PROFILE" ]; then if [ -f "$HOME/.bash_profile" ]; then - PROFILE="$HOME/.bash_profile" + NVM_PROFILE="$HOME/.bash_profile" elif [ -f "$HOME/.zshrc" ]; then - PROFILE="$HOME/.zshrc" + NVM_PROFILE="$HOME/.zshrc" elif [ -f "$HOME/.profile" ]; then - PROFILE="$HOME/.profile" + NVM_PROFILE="$HOME/.profile" fi fi -SOURCE_STR="[ -s \$HOME/.nvm/nvm.sh ] && . \$HOME/.nvm/nvm.sh # This loads NVM" +SOURCE_STR="[ -s $NVM_DIR/nvm.sh ] && . $NVM_DIR/nvm.sh # This loads NVM" -if [ -z "$PROFILE" ] || [ ! -f "$PROFILE" ] ; then - if [ -z $PROFILE ]; then - echo "=> Profile not found. Tried $HOME/.bash_profile and $HOME/.profile" +if [ -z "$NVM_PROFILE" ] || [ ! -f "$NVM_PROFILE" ] ; then + if [ -z $NVM_PROFILE ]; then + echo "=> Profile not found. Tried ~/.bash_profile ~/.zshrc and ~/.profile." + echo "=> Create one of them and run this script again" else - echo "=> Profile $PROFILE not found" + echo "=> Profile $NVM_PROFILE not found" + echo "=> Create it (touch $NVM_PROFILE) and run this script again" fi - echo "=> Run this script again after running the following:" + echo " OR" + echo "=> Append the following line to the correct file yourself:" echo - echo "\ttouch $HOME/.profile" + echo -ne "\t$SOURCE_STR" echo - echo "-- OR --" echo - echo "=> Append the following line to the correct file yourself" - echo - echo "\t$SOURCE_STR" - echo - echo "=> Close and reopen your terminal afterwards to start using NVM" - exit -fi - -if ! grep -qc 'nvm.sh' $PROFILE; then - echo "=> Appending source string to $PROFILE" - echo "" >> "$PROFILE" - echo $SOURCE_STR >> "$PROFILE" else - echo "=> Source string already in $PROFILE" + if ! grep -qc 'nvm.sh' $NVM_PROFILE; then + echo "=> Appending source string to $NVM_PROFILE" + echo "" >> "$NVM_PROFILE" + echo $SOURCE_STR >> "$NVM_PROFILE" + else + echo "=> Source string already in $NVM_PROFILE" + fi fi -echo "=> Close and reopen your terminal to start using NVM" +echo "=> Close and reopen your terminal afterwards to start using NVM" From 6df476cef8f04fbcd6ca64b6bbac3fc8117d1fef Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sun, 15 Dec 2013 14:32:17 +0100 Subject: [PATCH 2/3] Consistent output in different shells (bash, sh, zsh, ksh) --- install-gitless.sh | 13 +++++++------ install.sh | 10 ++++------ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/install-gitless.sh b/install-gitless.sh index 8e9707e..2eca57a 100755 --- a/install-gitless.sh +++ b/install-gitless.sh @@ -2,7 +2,7 @@ set -e -function fatalExit (){ +fatalExit(){ echo "$@" && exit 1; } @@ -16,11 +16,11 @@ fi # Downloading to $NVM_DIR mkdir -p "$NVM_DIR" -pushd "$NVM_DIR" > /dev/null -echo -ne "=> Downloading... " -curl --silent "$NVM_SOURCE" -o nvm.sh || fatalExit "Failed downloading $NVM_SOURCE" +echo -ne "\r=> Downloading... \c" +curl --silent "$NVM_SOURCE" -o "$NVM_DIR/nvm.sh" || fatalExit "Failed downloading $NVM_SOURCE" echo "Downloaded" -popd > /dev/null + +echo # Detect profile file if not specified as environment variable (eg: NVM_PROFILE=~/.myprofile). if [ ! "$NVM_PROFILE" ]; then @@ -46,7 +46,7 @@ if [ -z "$NVM_PROFILE" ] || [ ! -f "$NVM_PROFILE" ] ; then echo " OR" echo "=> Append the following line to the correct file yourself:" echo - echo -ne "\t$SOURCE_STR" + echo " $SOURCE_STR" echo else if ! grep -qc 'nvm.sh' $NVM_PROFILE; then @@ -58,4 +58,5 @@ else fi fi +echo echo "=> Close and reopen your terminal afterwards to start using NVM" diff --git a/install.sh b/install.sh index eb1a6f6..9efeb9a 100755 --- a/install.sh +++ b/install.sh @@ -18,10 +18,8 @@ fi if [ -d "$NVM_DIR" ]; then echo "=> NVM is already installed in $NVM_DIR, trying to update" - echo -ne "\r=> " - pushd "$NVM_DIR" > /dev/null - git pull --no-rebase origin master --quiet - popd > /dev/null + echo -e "\r=> \c" + (cd "$NVM_DIR" && git pull --no-rebase origin master --quiet) else # Cloning to $NVM_DIR mkdir -p "$NVM_DIR" @@ -54,8 +52,7 @@ if [ -z "$NVM_PROFILE" ] || [ ! -f "$NVM_PROFILE" ] ; then echo " OR" echo "=> Append the following line to the correct file yourself:" echo - echo -ne "\t$SOURCE_STR" - echo + echo " $SOURCE_STR" echo else if ! grep -qc 'nvm.sh' $NVM_PROFILE; then @@ -67,4 +64,5 @@ else fi fi +echo echo "=> Close and reopen your terminal afterwards to start using NVM" From aa19226ddef4b634a24d3679ba44160082c7056d Mon Sep 17 00:00:00 2001 From: Koen Punt Date: Sun, 15 Dec 2013 14:50:46 +0100 Subject: [PATCH 3/3] updated readme for installers --- README.markdown | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.markdown b/README.markdown index 4fb1bee..9044389 100644 --- a/README.markdown +++ b/README.markdown @@ -14,8 +14,11 @@ or Wget: wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh -The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile` or `~/.profile`). +The script clones the nvm repository to `~/.nvm` and adds the source line to your profile (`~/.bash_profile`, `~/.zshrc` or `~/.profile`). +You can customize the install source, directory and profile using the `NVM_SOURCE`, `NVM_DIR` and `NVM_PROFILE` variables. Eg: `curl ... | NVM_DIR=/usr/local/nvm sh` for a global install. + +*NB. There is also a [gitless installer](https://github.com/creationix/nvm/blob/master/install-gitless.sh) available, which accepts the same variables as the default installer.* ### Manual install