【发布时间】:2021-06-25 08:55:49
【问题描述】:
我们有一个应用程序可以将一些信息保存在加密文件中。要编辑文件,我们必须将文本编辑器名称放在 bash 的环境变量中,例如 EDITOR=vi。然后我们运行应用程序,它会在 vi 中打开解密的文件。我正在尝试提出一个更新加密文件的 bash 脚本。我能想到的唯一解决方案是将 sed 命令而不是 vi 传递给 EDITOR 变量。它非常适合EDITOR='sed -i s#aaaa#bbbb#' 之类的东西。
当我需要空间和正则表达式时,问题就开始了。例如:EDITOR='sed -i -r "s#^(\s*masterkey: )(.*)#\1xxxxx#"' 返回错误。我尝试使用$EDITOR test.txt 在 bash 中运行 EDITOR,我可以看到问题所在。它不喜欢双引号和它们之间的空格,所以我在双引号和 \s 之前添加了一个反斜杠而不是空格。现在它说未终止的地址正则表达式。我用谷歌搜索了几个小时,找不到任何解决方案。我尝试用双引号替换单引号,反之亦然,以及我在互联网上可以找到但没有运气的所有内容。
我该如何转义,我应该在这里转义哪些字符?
更新:
也许如果我解释整个情况,有人可以提出替代解决方案。有一个由 Ruby 编写的应用程序,它位于一个容器内。 Ruby 应用程序有一个用于生产的 secret_key_base,我们应该用EDITOR=vi rails credentials:edit --environment=production 更改密钥。我不知道 Ruby 和 google 没有返回任何用于自动化的 ruby 解决方案,所以我只能考虑向 Ruby 发送 sed 而不是 vi。
【问题讨论】:
-
你知道
vim有vim -x吗?For several hours I googled那么为什么不直接创建一个可执行文件呢? -
@KamilCuk,感谢您的评论,但我不想加密或解密文件。这是一个执行大量工作并将其令牌保存在加密文件中的应用程序。我的工作是每月轮换代币。
-
另外,应用程序位于 docker 容器内,我不允许在那里创建文件。我需要想出一个即时有效的解决方案,并将其放入一个可靠的剧本中。
-
the application is inside a docker container and I am not allowed to create a file there这很可能是无效的,您当然可以在/tmp中创建文件。put that in an ansible playbook当然 - 去做。请阅读How to Ask,请参阅question checklist。 (不,我不是反对者) -
@KamilCuk 再次感谢您抽出时间。我知道可以在容器上创建文件。我说我不允许这样做,因为容器正在生产中。
标签: bash sed environment-variables