Utilisation de rvm dans un script bash sous CentOS 6.2

0

J'essaie d'écrire un script qui passe par toutes les étapes pour installer et configurer un serveur graylog2 et une interface Web sous CentOS 6.2. Voici la section qui me pose problème:

curl -L get.rvm.io | bash -s stable
# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then

  # First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"

elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then

  # Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"

else

  printf "ERROR: An RVM installation was not found.\n"

fi

rvm install 1.9.3 --create
rvm use 1.9.3 --default

Ainsi, lorsqu'il essaiera de charger la fonction RVM dans le shell en tant que fonction, cela ne fonctionnera pas, ce qui l'empêchera d'installer Ruby. J'ai essayé d'autres méthodes de chargement de la fonction dans le shell, comme suit:

Rechercher manuellement le fichier de scripts à partir d'une installation racine

source /usr/local/rvm/scripts/rvm

Ajouter manuellement la variable d'environnement PATH pour inclure rvm:

PATH=$PATH:/usr/local/rvm/bin
export PATH

Appel manuel du chemin d'accès à la commande rvm

/usr/local/rvm/bin/rvm install 1.9.3 --create

Sourcing /etc/profile.d/rvm.sh

source /etc/profile.d/rvm.sh

Notez que si je ferme le shell et que je me reconnecte, rvm se charge très bien, mais je dois pouvoir tout faire depuis ce script sans avoir à me déconnecter et à me reconnecter. à partir de la racine. Vous pouvez regarder le script que j'ai écrit jusqu'à présent dans son intégralité ici .

Toute aide est appréciée.

MODIFIER

Après avoir ajouté set -x au script, voici le résultat quand il essaie de charger la fonction:

+ [[ -s /root/.rvm/scripts/rvm ]]
+ [[ -s /usr/local/rvm/scripts/rvm ]]
+ source /usr/local/rvm/scripts/rvm
++ [[ :braceexpand:hashall:interactive-comments:posix:xtrace: =~ :posix: ]]
++ return 0
+ rvm install 1.9.3 --create
./rvm_test.sh: line 27: rvm: command not found
+ rvm use 1.9.3 --default
./rvm_test.sh: line 28: rvm: command not found

EDIT 2

J'ai examiné le fichier / usr / local / rvm / scripts / rvm et j'ai trouvé ceci au tout début:

# Do not allow sourcing RVM in `sh` - it's not supported
# return 0 to exit from sourcing this script without breaking sh
[[ ":$SHELLOPTS:" =~ ":posix:" ]] && return 0 || true

Donc, je crois que cela cause mon problème mais je ne suis pas sûr. Je n'ai pas l'expérience du script bash: \ Donc, le problème que je devine est que mon shell n'est pas supporté (?) Quelqu'un peut-il préciser?

Rob H.
la source
Ajouter une ligne avec set -x au début du script pour voir comment toutes les variables sont développées et pourquoi les tests renvoient false. Etes-vous conscient de ce que si vous exécutez en tant que root, le $HOME variable donnera /root?
Daniel Andersson
ajouté la sortie après avoir ajouté set -x @DanielAndersson
Rob H.
set -x vous montrera si le test renvoie vrai ou faux. Renvoie-t-il false même si le fichier existe et a une taille & gt; 0, ou quel est le problème? Vous ne dites pas réellement ce qui ne fonctionne pas.
Daniel Andersson
Désolé, après avoir vérifié le script que j'essayais d'obtenir, je pense que mon shell n'est pas pris en charge. J'ai ajouté un autre montage montrant ce que j'ai trouvé @DanielAndersson
Rob H.

Réponses:

2

Répondre à ma propre question haha

Il suffit de changer la première ligne

#!/bin/sh

à

#!/bin/bash

dans mon script corrige le problème que je rencontrais. Je me suis rendu compte que le script qui essayait d'être recherché ne supporte pas sh.

Rob H.
la source