【问题标题】:Bash script to pull variable credentials from another file using ". filename"使用“.filename”从另一个文件中提取变量凭据的 Bash 脚本
【发布时间】:2020-01-16 14:40:50
【问题描述】:

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

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

我发现当我使用“.file”运行我的脚本时,我应该能够拥有一个包含我的凭据的文件并将它们“内联”,但是当我运行我的脚本时,它只会返回一个错误,即该文件没找到。

在我运行脚本的目录上使用 ls 包含:

  • test.sh
  • 凭证

“凭证”文件内容

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”行之间的空格,并试图找出我可能在网上做错了什么,但无法正确地通过谷歌搜索找到相关答案。

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

【问题讨论】:

  • 您可以检查 .netrc 是否适合您
  • 基本检查:您是否从 credential 文件所在的同一文件夹运行脚本?
  • 运行test.sh时的当前目录是什么?您用来运行它的确切命令是什么? credential 在哪个目录中。请edit您的问题添加此信息,不要在评论中回答。
  • @Poshi 是的,我在与 test.sh 脚本相同的文件夹中运行 credential file
  • 请注意,. filenamePATH 中搜索filename。如果PATH 不包含.,则不会在当前目录中找到filename。您可能必须使用 . ./filename. $(dirname $0)/filename 之类的东西,具体取决于您在当前工作目录中还是在与调用脚本相同的目录中具有 filename

标签: linux bash ubuntu-18.04 windows-subsystem-for-linux


【解决方案1】:

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

. ./credential

绕过PATH 查找。

但这并不安全,因为现在您只能从正确的目录运行脚本。要么将credential放入您的PATH 上的目录中,要么使用绝对路径指定credential 的位置。

【讨论】:

  • 如果credential 与调用脚本位于同一目录中,您可以使用. $(dirname $0)/credential
  • ... 除非你应该引用它的健壮性:. "$(dirname "$0")"/credential
猜你喜欢
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2011-04-07
  • 2015-09-12
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
相关资源
最近更新 更多