변수가 포함된 여러 줄을 파일에 쓰기

변수가 포함된 여러 줄을 파일에 쓰기

변수를 사용하여 구성 파일에 텍스트를 출력하고 단일 부스트 라인을 사용하여 쉘 스크립트에 포함시키려고 합니다.

지금까지 필요한 줄 간격 등으로 파일을 생성하는 아래 코드가 있지만 변수를 전달하는 방법을 모르겠습니다.

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

올바른 방법 중 하나는 다음과 같습니다.

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

관련 정보