Gav*_*ard 5 unix filesystems symbolic-link
我正在处理一个config.yml从当前目录读取配置文件的应用程序。此配置文件包含不应签入源控制的机密信息(API 密钥)和其他可以签入的配置信息。
我想要做的是将这个配置文件分成两部分,分别是config.secret.yml和config.public.yml. config.secret.yml将被源代码管理忽略,而config.public.yml可以签入。
然后,我想以某种方式创建一个config.yml类似文件的对象,该对象有效地“符号链接” config.secret.ymland的连接内容config.public.yml,以便发生这种情况:
> cat config.secret.yml
---
:api_key: 2712ab206a8003e44b2a84c467fc1b58
>
> cat config.public.yml
:site_id: 123
>
> cat config.yml
---
:api_key: 2712ab206a8003e44b2a84c467fc1b58
:site_id: 123
Run Code Online (Sandbox Code Playgroud)
我知道符号链接本身不支持这种行为,并且通常会从应用程序端读取“默认”和“本地”设置,但让我们假设只有一个配置文件可以被阅读。
该文件由 Ruby 的File.read()方法读取并解析,YAML.load()如果这为狡猾的黑客提供了任何机会。
您应该能够为此使用命名管道。
作为样本:
echo foo > file1
echo bar > file2
Run Code Online (Sandbox Code Playgroud)
然后在同一目录中创建一个新脚本,如下所示:
组合.sh:
#!/bin/bash
[ -p foobar ] && rm foobar
trap "[ -p foobar ] && rm foobar && exit" SIGINT
while [ true ]; do
mkfifo foobar
echo "Writing File"
cat file1 file2 > foobar
rm foobar
done
Run Code Online (Sandbox Code Playgroud)
然后
chmod +x combine.sh
./combine.sh
Run Code Online (Sandbox Code Playgroud)
foobar这将创建一个在同一目录中命名的管道。现在,您可以从任何进程中读取此管道,就像它是真实文件一样。
例如,在单独的终端中:
$ cat foobar
foo
bar
Run Code Online (Sandbox Code Playgroud)
当然,./combine.sh 2>&1 > /dev/null &如果您需要更大的持久性,您可以使用它在后台运行或将其作为服务运行。
| 归档时间: |
|
| 查看次数: |
1412 次 |
| 最近记录: |