GNU環境で環境変数を用いたテンプレートファイルなどを展開出来るコマンド。

envsubstは標準入力から環境変数として指定されている変数 $HOGE もしくは ${HOGE} を置換する事が出来る。

$ cat nsd.conf.tmp
server:
        use-systemd: yes
        username: nsd
        zonesdir: "/etc/nsd/zones"
        logfile: "/var/log/nsd/nsd.log"
        pidfile: "/var/run/nsd/nsd.pid"
        hide-version: yes
        tcp-count: ${NSD_TCP_COUNT}
        round-robin: yes
        verbosity: ${NSD_VERBOSITY}
        zonefiles-write: ${NSD_ZONE_FILE_WRITE}
$ export NSD_TCP_COUNT=1000
$ export NSD_VERBOSITY=2
$ export NSD_ZONE_FILE_WRITE=1
$ envsubst < nsd.conf.tmp
server:
        use-systemd: yes
        username: nsd
        zonesdir: "/etc/nsd/zones"
        logfile: "/var/log/nsd/nsd.log"
        pidfile: "/var/run/nsd/nsd.pid"
        hide-version: yes
        tcp-count: 1000
        round-robin: yes
        verbosity: 2
        zonefiles-write: 1
$

また、ファイルの中で環境変数のようなパラメータを利用している場合(Apacheの設定ファイルなど)は引数に置換する環境変数を指定する事でその変数のみ置換を行う事が出来る。

$ envsubst '$$NSD_TCP_COUNT' < nsd.conf.tmp
server:
        use-systemd: yes
        username: nsd
        zonesdir: "/etc/nsd/zones"
        logfile: "/var/log/nsd/nsd.log"
        pidfile: "/var/run/nsd/nsd.pid"
        hide-version: yes
        tcp-count: 1000
        round-robin: yes
        verbosity: ${NSD_VERBOSITY}
        zonefiles-write: ${NSD_ZONE_FILE_WRITE}
$