2016-06-16 16 views
7

Ist es möglich, auf andere Umgebungsvariablen zu verweisen, wenn neue in Systemd gesetzt werden?Verweise auf andere Umgebungsvariablen in Systemd

[Service] 
EnvironmentFile=/etc/environment 
Environment=HOSTNAME=$COREOS_PRIVATE_IPV4 
Environment=IP=$COREOS_PRIVATE_IPV4 
Environment=FELIX_FELIXHOSTNAME=$COREOS_PRIVATE_IPV4 

Der obige Code scheint nicht zu funktionieren.

+1

Ich stimme für das Schließen dieser Frage als Off-Topic, weil es besser für die Unix- und Linux-Site geeignet ist. Es bezieht sich nicht direkt auf die Programmierung. http://unix.stackexchange.com/ –

Antwort

8

Dies ist wirklich eine Frage für unix & linux. Aber nichtsdestoweniger: No, systemd führt keine Erweiterung der Umgebungsvariablen innerhalb Environment=. Von man systemd.exec:

Environment= 
     Sets environment variables for executed processes. Takes a space-separated list of variable assignments. This 
     option may be specified more than once, in which case all listed variables will be set. If the same variable is 
     set twice, the later setting will override the earlier setting. If the empty string is assigned to this option, 
     the list of environment variables is reset, all prior assignments have no effect. Variable expansion is not 
     performed inside the strings, however, specifier expansion is possible. The $ character has no special meaning. 
     If you need to assign a value containing spaces to a variable, use double quotes (") for the assignment. 

     Example: 

      Environment="VAR1=word1 word2" VAR2=word3 "VAR3=$word 5 6" 

     gives three variables "VAR1", "VAR2", "VAR3" with the values "word1 word2", "word3", "$word 5 6". 

Wie Sie aus dem Beispiel in der Dokumentation bedeutet $word nur $word wird keine Erweiterung durchgeführt werden. Die Bezeich dass dass man spricht über die %i sind, %n, %u usw. Sie sind in man systemd.unit (unter ihrem eigenen man Abschnitt).


Auf der anderen Seite ExecStart= und seine Derivate werden Umwelt variable Expansion durchzuführen. Die Verwendung der Umgebungsvariablen auf ExecStart= ist die allgemeine Problemumgehung für zusätzliche Umgebungsvariablen in systemd. I glaube,, das ist auch einer der die Gründe, warum so viele aktuelle Programme die gleichen Parameter aus der Umgebung und von Befehlszeilenparametern akzeptieren.

Ein Beispiel für Expansion in ExecStart= von man systemd.service:

Example: 

     Environment="ONE=one" 'TWO=two two' 
     ExecStart=/bin/echo $ONE $TWO ${TWO} 

    This will execute /bin/echo with four arguments: "one", "two", "two", and "two two". 

    Example: 

     Environment=ONE='one' "TWO='two two' too" THREE= 
     ExecStart=/bin/echo ${ONE} ${TWO} ${THREE} 
     ExecStart=/bin/echo $ONE $TWO $THREE 

    This results in echo being called twice, the first time with arguments "'one'", "'two two' too", "", and the second 
    time with arguments "one", "two two", "too". 

systemd hat seine Dokumentation über mehr man ‚s verteilt, aber man sie wird nach einer gewissen Zeit verwendet.