Ist es eine gute Idee, Umgebungsvariablen in /usr/local/bin abzulegen?

Ist es eine gute Idee, Umgebungsvariablen in /usr/local/bin abzulegen?

Ich verwende AWS CFN, um Ubuntu-Instanzen zu starten, und ich muss Variablen, die im CFN-Startskript bereitgestellt werden, an die Skripte auf der Instanz übergeben. Ich kann beispielsweise „db-server=db-2.domain.com“ übergeben, und es gibt eine Reihe von Skripten auf der Instanz, die diese Adresse wissen möchten.

Im Moment erstelle ich eine Datei in /etc/profile.d, in der ich Variablen mit festlege. exportDas funktioniert aber nur, wenn die Bash als Anmelde-Shell gestartet wird, was zusätzliche Aktionen meinerseits erfordert, um diese Variablen überall zu haben.

Daher dachte ich, dass ich vielleicht stattdessen Dateien in /usr/local/bin erstellen könnte, z. B. get-db-host.shmit echo "db-2.domain.com"„as“-Inhalt, sodass sie jedem Skript zur Verfügung stünden, ohne dass Änderungen erforderlich wären.

Ist das ein guter Ansatz?

Antwort1

Ist das ein guter Ansatz?

Ich bin ziemlich sicher, dass alle Skripte, von denen Sie sprechen, Shell-Skripte sind. In diesem Fall könnten Sie einfach alle Ihre Variablen in eine Konfigurationsdatei einfügen:

db-server=db-2.domain.com

Platzieren Sie es an einem Standardspeicherort (z. B. /usr/local/etc/myapp/) und geben Sie es in den anderen Skripten als Quelle an:

. /usr/local/etc/myapp

Sie können /etcnatürlich auch einfach das einfache verwenden.

Antwort2

Die empfohlene Methode besteht darin, die Variablen einfach hinzuzufügen /etc/environment. Diese Datei wird beim Login gelesen (aus demUbuntu-Dokumente):

Umgebungsvariableneinstellungen, die das gesamte System betreffen (und nicht nur einen bestimmten Benutzer), sollten nicht in einem der vielen Skripts auf Systemebene platziert werden, die ausgeführt werden, wenn das System oder die Desktop-Sitzung geladen werden, sondern in

/etc/environment – ​​Diese Datei ist speziell für systemweite Einstellungen von Umgebungsvariablen gedacht. Es handelt sich nicht um eine Skriptdatei, sondern sie besteht aus Zuweisungsausdrücken, einem pro Zeile. Insbesondere speichert diese Datei die systemweiten Gebietsschema- und Pfadeinstellungen.

/etc/environment/Bearbeiten und ergänzen Sie einfach

db-server=db-2.domain.com

Antwort3

Ich würde diese Idee ablehnen. Dieses Verzeichnis /usr/local/binist für ausführbare Dateien gedacht, die lokal auf der Box vorhanden sind und (normalerweise) nicht Teil eines bestimmten Pakets sind.

Anstatt ein mysteriöses Setup daraus zu machen, platzieren Sie die Variablen dort, wo sie für jemand anderen, der Ihre Aufgabe möglicherweise ausführen muss, klar ersichtlich sind.

Ich würde sie in einer Datei in Ihrem Verzeichnis ablegen $HOMEund diese Datei einfach aus Ihrem beziehen $HOME/.bashrc.

Beispiel

if [ -f $HOME/.my_aws_env ]; then
    . $HOME/.my_aws_env
fi

Oder du bist cool und hip und bringst es in einer Zeile:

[ -f $HOME/.my_aws_env ] && . $HOME/.my_aws_env

verwandte Informationen