我正在尝试使用变量将文本输出到配置文件,在单个提升行中将其包含在 shell 脚本中。
到目前为止,我有下面的代码,它创建了具有必要的行距等的文件,但我不知道如何获取要通过的变量。
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