2013-03-15 10 views
11

Ich versuche herauszufinden, die beste Möglichkeit, einige Umgebungsvariablen mit Marionette festzulegen.Einstellen von Umgebungsvariablen mit Puppe

Ich könnte exec verwenden und einfach tun export VAR=blah. Dies würde jedoch nur für die aktuelle Sitzung andauern. Ich dachte auch darüber nach, es einfach am Ende einer Datei wie bashrc hinzuzufügen. Allerdings glaube ich nicht, dass es eine zuverlässige Methode gibt, um zu überprüfen, ob alles bereit ist. so würde es am Ende jeder Marionette hinzugefügt werden.

+1

Ist das Setzen einer Variablen nicht eine andere Art zu sagen, 'edit a rc file'? Sie möchten Inhalte wirklich in einer Datei bereitstellen? –

+0

Es ist auch möglich, systemweite Umgebungsvariablen zu definieren, indem Sie die Datei/etc/environment mit der KEY = VALUE-Variablenliste erstellen. – izi

Antwort

20

ich einen Blick auf this related question nehmen würde.

*.sh Skripte in /etc/profile.d an Benutzer-Login-Zeit lesen (wie die Post sagt, zugleich /etc/profile bezogen ist)

Variablen export -ed in jedem in /etc/profile.d platziert Skript wird daher Ihre Benutzer zur Verfügung . Sie können dann eine file Ressource verwenden, um sicherzustellen, dass diese Aktion idempotent ist. Zum Beispiel:

file { "/etc/profile.d/my_test.sh": 
    content => 'export MYVAR="123"' 
} 
0

Wenn Sie es zu Ihrem bashrc hinzufügen können Sie überprüfen, ob es in der ENV-Hash ist von

tun
ENV[VAR] 

Welche => zurück „blah“

+0

Danke, und wie würde ich Marionette sagen, nur den Befehl auszuführen, wenn es nicht innerhalb des ENV-Hashes ist? – Jake232

+0

Es sollte ENV ['VAR'] sein, um auf die Umgebungsvariable VAR – Spooner

+0

'zuzugreifen, es sei denn, ENV [VAR];' 'setzt" Dies ist Ihr Code ";' 'end;' –

1

oder in einem alternativen Mittel zum indempotent Ergebnis:

Beispiel

if [[ ! grep PINTO_HOME /root/.bashrc | wc -l > 0 ]] ; then 
     echo "export PINTO_HOME=/opt/local/pinto" >> /root/.bashrc ; 
fi 

Diese Option ermöglicht diese Umgebungsvariable gesetzt werden, wenn die Anwesenheit der Schecke Anwendung macht es Warrent, anstatt die .bash_profile eines Benutzers zu komponieren, unabhängig davon, welche Anwendungen auf der Box landen können.

0

Wenn Sie einen Blick auf Github's Boxen werfen, beziehen sie ein Skript (/opt/boxen/env.sh) von ~/.profile. Dieses Skript führt ein paar Sachen wie:

for f in $BOXEN_HOME/env.d/*.sh ; do 
    if [ -f $f ] ; then 
    source $f 
    fi 
done 

Diese Skripte, die wiederum setzen Umgebungsvariablen für die jeweiligen Module.