環境変数ファイルを読み込んだ後にコマンドを実行する方法
envコマンドを使う
Section titled “envコマンドを使う”簡単なものであれば env で実現できる。
env $(cat ~/lib/env) commandただし、この方法は ~/lib/env の値に空白が含まれたとき困る。IFS= をうまくやれば対応できるが、そこまでやるなら次の方法を使うほうが簡単だろう。
bashのallexportとsourceを使う
Section titled “bashのallexportとsourceを使う”bash には allexport オプションがあり、これを有効にすると全ての変数が環境変数としてエクスポートされる。これを使ってファイルを読む。
set -asource ~/lib/envset +aexec command標準機能だけで実現できるので、特別な理由がなければこれでいいだろう。
systemd-runを使う
Section titled “systemd-runを使う”systemd-run でも環境変数を読んでからコマンドを実行できる。この場合はプロセス階層がsystemdユーザーユニットからの派生となるので、~/.bash_profile 等で設定した環境変数は引き継がれない。systemdで環境変数が伝播するしくみも参照するといい。
systemd-run --user --quiet --pty --wait --collect --service-type=exec \ --property EnvironmentFile=~/lib/env commandコマンドのオプションでいえば、デフォルトではコマンドの実行に失敗したときに failed としてユニットが残ってしまうので systemctl —user reset-failed で明示的に消していかなければならない。それでは面倒なので —collect を付けて回収されるようにしている。