环境变量中的文件内容

环境变量中的文件内容

我想完全避免将凭据写入磁盘。我希望从环境变量中读取凭据。但某些脚本需要磁盘上的凭据文件,以便从中读取这些凭据。当它是二进制文件时尤其难以处理,甚至没有办法修改脚本。并且没有可以从其他地方读取的 cli 选项。 gam(谷歌应用程序管理器)就是这样的一个例子。

问题:有什么方法可以使二进制文件期望保存凭据值以某种方式从环境变量中提取该值?

理想的解决方案应该适用于 Linux/Unix。

答案1

一场狂欢流程替代行为就像一个文件:

some-program-that-reads-a-file <(echo "$MY_ENV_VAR")
#..............................^^..................^

以下是程序如何看待进程替换的演示:使用 awk 打印其参数:

$ awk 'BEGIN {for (i=0; i<ARGC; i++) print i, ARGV[i]}' <(echo $HOME)
0 awk
1 /dev/fd/63

不同的 shell 使用不同的语法进行进程替换

  • 桀骜
    some-program =(echo $VAR)
    
  • some-program (echo $VAR | psub)
    
  • ksh,与 bash 相同

如果您需要特定文件,请使用 FIFO:

mkfifo ~/tmp/creds-file.pem
printf '%s' "$var" > ~/tmp/creds-file.pem &

cat ~/tmp/creds-file.pem

答案2

不确定这是否可以安全地完成(例如其他进程可能会先读取 FIFO),但可能值得一试:使用 FIFO 并echo进入其中:

mkfifo ~/tmp/creds-file.pem
echo "$env_var" > ~/tmp/creds-file.pem & run_application_that_reads_from_file
rm ~/tmp/creds-file.pem

相关内容