Bash-抓取输出并将其放在文件中的特定位置

时间:2019-01-29 14:11:49

标签: bash amazon-web-services nginx

我有用于为S3生成AWS签名密钥的python脚本。它生成两个值:

GZkXNl6Leat71ckcwfxGuiHxt9fnkj47F1SbVjRu/t0=
20190129/eu-west-2/s3/aws4_request

两者均有效期为7天。我想要的是在Docker容器内使用cron每五天运行一次该脚本,获取输出并在Nginx配置中放置/替换值 配置:

  server {
    listen 80;
    aws_access_key 'AKIDEXAMPLE';
    aws_signing_key FIRST_VALUE;
    aws_key_scope SECOND_VALUE;
    aws_s3_bucket s3_bucket_name;

    location / {
    aws_sign;
      proxy_pass http://s3_bucket_name.s3.amazonaws.com;
    }

然后在容器中重新启动nginx

1 个答案:

答案 0 :(得分:0)

假设这些值存储在val_file中,然后将它们放入nginx.conf中,则这种简单的解决方案应该做到-

$: cat script
#! /bin/env bash
{ read -r val1    # read the first line
  read -r val2    # read the second line
  sed -i "s!FIRST_VALUE!$val1!;
          s!SECOND_VALUE!$val2!;
  " nginx.conf
} < val_file

$: script
$: cat nginx.conf
  server {
    listen 80;
    aws_access_key 'AKIDEXAMPLE';
    aws_signing_key GZkXNl6Leat71ckcwfxGuiHxt9fnkj47F1SbVjRu/t0=;
    aws_key_scope 20190129/eu-west-2/s3/aws4_request;
    aws_s3_bucket s3_bucket_name;

    location / {
    aws_sign;
      proxy_pass http://s3_bucket_name.s3.amazonaws.com;
    }

冰壶使两个read都由单个输入供给。然后,使用sed就是!,因为您的数据中包含标准正斜杠。 sed上的双引号允许嵌入的vars-不理想,但在这里看起来还可以。