変数を含む複数行をファイルに書き込む

変数を含む複数行をファイルに書き込む

変数を使用して設定ファイルにテキストを出力し、単一のブーストラインを使用してシェルスクリプトに含めようとしています。

これまでに必要な行間隔などでファイルを生成するための以下のコードがありますが、変数を渡す方法がわかりません。

sudo sh -c 'echo  /etc/grafana/provisioning/datasources/InfluxDB.yaml << EOL
 apiVersion: 1
 datasources:
  - name: $dbname
    type: influxdb
    url: http://localhost:8086
    user: $usrname
    password: $pssword
    database: $dbname
    access: proxy
    editable: true
    isDefault: true
EOL'

また、「、」または「」のさまざまな組み合わせを試してみましたが、正しく使用できないようです。上記のように、何も取得できないか、変数がテキストとして記録されます。

sudo sh -c 'echo "apiVersion: 1\n datasources:\n  - name: $dbname\n    type: influxdb\n    url: http://localhost:8086\n    user: $usrname\n    password: $pssword\n    database: $dbname\n    access: proxy\n    editable: true\n    isDefault: true" > /etc/grafana/provisioning/datasources/InfluxDB.yaml'

私はどこで間違っていますか?

答え1

正しい方法の1つは次のとおりです。

sudo sh -c "cat >> /etc/grafana/provisioning/datasources/InfluxDB.yaml << 'EOL'
 apiVersion: 1
 datasources:
  - name: $dbname
    type: influxdb
    url: http://localhost:8086
    user: $usrname
    password: $pssword
    database: $dbname
    access: proxy
    editable: true
    isDefault: true
EOL"

ファイルを上書きするには、catコマンドの後に ">>"の代わりに ">"を使用する必要があります。

答え2

私が正しく理解した場合は、次のことを試すことができます。

dbname=db
usrname=user
pssword=pass

sudo cat << EOL >> /etc/grafana/provisioning/datasources/InfluxDB.yaml
 apiVersion: 1
 datasources:
  - name: $dbname
    type: influxdb
    url: http://localhost:8086
    user: $usrname
    password: $pssword
    database: $dbname
    access: proxy
    editable: true
    isDefault: true
EOL

出力:

cat /etc/grafana/provisioning/datasources/InfluxDB.yaml

 apiVersion: 1
 datasources:
  - name: db
    type: influxdb
    url: http://localhost:8086
    user: user
    password: pass
    database: db
    access: proxy
    editable: true
    isDefault: true

関連情報