Bash 使用“.filename”从另一个文件中提取可变凭据的脚本

Bash script to pull variable credentials from another file using ". filename"

运行 Ubuntu Windows 10 上的 18.04 子系统,但也尝试在 Ubuntu 18.04 Google 云虚拟机上执行此操作。

我意识到将我的登录凭据放入我的脚本中是一个相当愚蠢的想法,不仅是为了安全风险,而且因为如果我更改密码,我将不得不编辑每个脚本...

我发现当我 运行 我的脚本使用“.file”时,我应该能够拥有一个包含我的凭据的文件并将它们 "inline",但是当我 运行 我的脚本只是 returns 找不到文件的错误。

在目录中使用 ls 运行 脚本来自:

"credential" 文件内容

USER=<username>
PWD=<password>

test.sh

的当前脚本
#!/bin/bash

set -eu

DS=$(date "+%Y-%m-%d" -d "11 days ago")
DE=$(date "+%Y-%m-%d" -d "1 day ago")

. credential

rm -f cookiejar

curl  /dev/null -s -S -L -f -c cookiejar 'https://url/auth/authenticate' -d name=$USER -d passwd=$PWD

错误信息

+ set -eu
+ date +%Y-%m-%d -d 11 days ago
+ DS=2020-01-05
+ date +%Y-%m-%d -d 1 day ago
+ DE=2020-01-15
+ account=465
+ . credential test.sh: 9: .: credential: not found

我试过弄乱脚本“.credential”行之间的空格,并试图找出我可能在网上做错了什么,但未能 google 正确搜索找到相关答案。

有人可以确认我在这里遗漏/不知道的内容,或者向我指出可能有帮助的文档吗?这是我第一次尝试做这样的事情,如果这是一个基本问题,我深表歉意。

. 使用路径查找来查找由其参数命名的文件。由于当前工作目录通常不在您的 PATH 中(也不应该),因此 . 将找不到该文件。相反,使用

. ./credential

绕过PATH查找。

不过,这并不是很安全,因为现在您只能 运行 来自正确目录的脚本。将 credential 放在 PATH 上的一个目录中,或者使用绝对路径指定 credential 所在的位置。