2014-11-19 22 views
7

Sto provando ad aggiungere alcune righe aggiuntive a .bashrc nella mia directory home dallo script della shell di provisioning quando si avvia una nuova istanza con Vagrant.Aggiorna .bashrc dallo script di provisioning della shell con Vagrant

Nello script di shell che ho:

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 

Tuttavia dopo il completamento nulla è stato scritto per .bashrc.

Questa è una versione ridotta della sceneggiatura completa l'intenzione di installare Ruby/Rails.

+0

Aggiungere un debug echo tra le aggiunte al file bashrc, la mia ipotesi migliore è che il tuo script lo ignori in qualche modo a causa di una struttura di controllo. – ShellFish

+0

Ottengo il seguente in stdout quando lo script bash sta colpendo le righe che stanno cercando di echo in .bashrc, stanno per essere eseguite - è possibile che vengano echeggiate in un file .bashrc che non è in/home/vagabondo? ==> default: ++ echo 'source /usr/local/share/chruby/chruby.sh' ==> default: ++ echo 'source /usr/local/share/chruby/auto.sh' ==> default: ++. /root/.bashrc ==> default: +++ '[' -z '' ']' ==> default: +++ restituisce –

+0

Se lo si può facilmente evitare sostituendo il '' 'da il percorso completo da '/'? – ShellFish

risposta

16

È necessario fornire il percorso completo del file.

E.g.

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

Questa è la risposta corretta che una dozzina di altri thread SO non hanno. Il ~ non si risolve come previsto apparentemente durante l'esecuzione del vagabondo. – jpwynn

+0

Questo perché il provisioner è in esecuzione come root, '~' si riferisce a '/ root', non'/home/vagrant' –

+0

Ho il seguente errore '/root/home/vagrant/.bashrc: Nessun file o directory simile ' – Kosmetika

-2

Prova questo per le tue ultime 2 linee: dovrebbe darti esattamente ciò di cui hai bisogno.

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

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

'source' proverà ad eseguire le linee dello script. – philbrooksjazz

+0

Questo concatenerebbe i due file, quello che sto cercando è aggiungere la riga "source /usr/local/share/chruby/chruby.sh" alla fine di .bashrc in modo che venga eseguita quando apro bash. Come da passaggi qui - http://ryanbigg.com/2014/10/ubuntu-ruby-ruby-install-chruby-and-you// –

+0

OK - ora capisco cosa stai cercando di fare. Se si digita semplicemente quella riga dalla console della shell, funziona? Ho provato in entrambi i modi e funziona bene. Prova a impostare il target .bashrc usando il nome completo del percorso, invece di "~ /". Penso che la mia soluzione sopra farà la stessa cosa, ma sono d'accordo che ingomberà bashrc – philbrooksjazz

-1

aggiungere queste righe al .bashrc

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

Sarà testualmente includere lo script in .bashrc ed eseguirlo quando si apre una nuova shell.

+0

Non voglio aggiungere le linee manualmente - Voglio aggiungerle tramite uno script di shell. –

+0

Non capisco il tuo commento. Aggiungi queste righe al file .bashrc e lo script chruby.py dovrebbe essere eseguito all'apertura di una nuova shell ... La mia risposta non ti suggerisce di copiare le righe da chruby.sh e di incollarle in .bashrc in qualsiasi modo .. Se sei sicuro che il file esiste puoi mettere 'echo'. /usr/local/share/chruby/chruby.sh ">> ~/.bashrc' nel tuo script. – ShellFish

Problemi correlati