2014-11-19 7 views
7

Ich versuche, zusätzliche Zeilen zu .bashrc in meinem Home-Verzeichnis von der Bereitstellung Shell-Skript beim Starten einer neuen Instanz mit Vagrant hinzufügen.Update .bashrc von Provisioning-Shell-Skript mit Vagrant

Im Shell-Skript Ich habe:

set -x 

sudo apt-get update 

sudo apt-get install vim 

echo "source /usr/local/share/chruby/chruby.sh">> ~/.bashrc 
echo "source /usr/local/share/chruby/auto.sh">> ~/.bashrc 

jedoch nach Abschluss nichts .bashrc geschrieben wurde.

Dies ist eine verkürzte Version des vollständigen Skripts, dessen Absicht es ist, Ruby/Rails zu installieren.

+0

Fügen Sie ein Debug-Echo zwischen den Hinzufügungen zur bashrc-Datei hinzu, meine beste Vermutung ist, dass Ihr Skript es wegen einer Kontrollstruktur irgendwie überspringt. – ShellFish

+0

Ich bekomme Folgendes in stdout, wenn das Bash-Skript die Zeilen trifft, die versuchen, in .bashrc zu echoten, sie werden ausgeführt - ist es möglich, dass sie auf eine .bashrc-Datei zurückgegeben werden, die nicht in/home ist/Landstreicher? ==> Standard: ++ Echo 'Quelle /usr/local/share/chruby/chruby.sh' ==> Standard: ++ Echo 'Quelle /usr/local/share/chruby/auto.sh' ==> Standard: ++. /root/.bashrc ==> default: +++ '[' -z '' ']' ==> Standard: +++ return –

+0

Wenn Sie sind, können Sie es leicht vermeiden, indem Sie die '~' durch ersetzen der vollständige Pfad von '/'? – ShellFish

Antwort

16

Sie müssen den vollständigen Pfad zu der Datei angeben.

z.

+1

Dies ist die richtige Antwort, die ein Dutzend anderer SO-Threads nicht haben. Das ~ löst sich scheinbar nicht wie erwartet, wenn der vagrant provisioner ausgeführt wird. – jpwynn

+0

Das liegt daran, dass der Provisioner als root läuft, '~' bezieht sich auf '/ root', nicht auf'/home/vagrant' –

+0

Ich habe folgenden Fehler '/root/home/vagrant/.bashrc: Keine solche Datei oder dieses Verzeichnis' – Kosmetika

-2

Versuchen Sie dies für Ihre letzten 2 Zeilen - es sollte genau geben, was Sie brauchen.

echo "source /usr/local/share/chruby/chruby.sh" >> /home/vagrant/.bashrc 

echo "source /usr/local/share/chruby/auto.sh" >> /home/vagrant/.bashrc 
+0

'source' wird versuchen, die Zeilen des Skripts auszuführen. – philbrooksjazz

+0

Dies würde die beiden Dateien verketten, was ich danach bin, fügt die Zeile "source /usr/local/share/chruby/chruby.sh" am Ende von .bashrc hinzu, so dass es ausgeführt wird, wenn ich bash öffne. Wie in den Schritten hier - http://ryanbigg.com/2014/10/ubuntu-ruby-ruby-install-chruby-and-you// –

+0

OK - jetzt verstehe ich, was Sie versuchen zu tun. Wenn Sie nur diese Zeile von der Shell-Konsole eingeben - funktioniert das? Ich habe es in beide Richtungen versucht und es funktioniert gut. Versuchen Sie, das Ziel .bashrc mit dem vollständigen Pfadnamen anstelle von "~ /" festzulegen. Ich denke, dass meine obige Lösung das gleiche tun wird, aber ich stimme zu, dass ich mich überstürzen werde. Bashrc – philbrooksjazz

-1

diese Zeilen hinzufügen

if [ -f /usr/local/share/chruby/chruby.sh ]; then 
    . /usr/local/share/chruby/chruby.sh 
fi 

Es wird textlich das Skript in Bashrc gehören .bashrc und ausführen, wenn eine neue Shell öffnen.

+0

Ich möchte die Zeilen nicht manuell hinzufügen - ich möchte sie über ein Shell-Skript hinzufügen. –

+0

Ich verstehe Ihren Kommentar nicht. Fügen Sie diese Zeilen der .bashrc hinzu und das Skript chruby.py sollte beim Öffnen einer neuen Shell ausgeführt werden ... Meine Antwort schlägt Ihnen nicht vor, die Zeilen von chruby.sh zu kopieren und sie in .bashrc in irgendeiner Weise einzufügen. Wenn Sie sicher sind, dass die Datei existiert, können Sie 'echo" .usr/local/share/chruby/chruby.sh ">> ~/.bashrc' in Ihr Skript einfügen. – ShellFish