Systemdで新しい環境変数を設定するときに他の環境変数を参照することは可能ですか?
[Service]
EnvironmentFile=/etc/environment
Environment=HOSTNAME=$COREOS_PRIVATE_IPV4
Environment=IP=$COREOS_PRIVATE_IPV4
Environment=FELIX_FELIXHOSTNAME=$COREOS_PRIVATE_IPV4
上記のコードは機能していないようです。
これは本当に nix&linux の質問です。ただし、それでも:No、systemd
はEnvironment=
内で環境変数の展開を実行しません。 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".
ドキュメントの例からわかるように、$Word
は単に$Word
を意味します。展開は実行されません。 man
が話している指定子は、%i
、%n
、%u
、など。それらはman systemd.unit
にあります(独自のman
セクションの下)。
一方、ExecStart=
とその派生物は、環境変数の展開を実行します。 ExecStart=
で環境変数を使用することは、systemd
の追加の環境変数の一般的な回避策です。私believe、それはまたの1つであり、最近の多くのプログラムが環境とコマンドラインから同じパラメーターを受け入れる理由です。パラメーター。
ExecStart=
からの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
のドキュメントはいくつかのman
に分散していますが、しばらくすると慣れてきます。