从另一个文件读取变量到bash中

从另一个文件读取变量到bash中

我编写了一个 bash 脚本,它调用其他进程(在终端上要求输入密码的进程)。

#!/bin/bash
source pc.txt
snp_pw=$export_snapshot
export snapshot_pw=snp_pw
echo_time() {
    date "+%d:%b:%Y:%H:%M:%S"
}
# Export Snapshot
echo "$(echo_time) :STARTING EXPORT SNAPPSHOT SCRIPT" | tee -a ${mail_log}
loop_var=3
echo "$(echo_time) :ON FAILURE TRY AT MAX ${loop_var} ATTEMPTS" | tee -a ${mail_log}
i=1
while [ "${loop_var}" -gt 0 ]; do
expect <(cat << 'EOD'
spawn $::env(Snp_Script_Path)/export_service_instance.sh bootstrap Export_Files/test.bar
expect "Enter RPD Password:"
send -- "$::env(snapshot_pw)\r"
expect "Re-enter RPD Password:"
send -- "$::env(snapshot_pw)\r"
interact
EOD
) &> ${export_snapshot_log_location}

我如何从其他文件的变量中读取密码,而不是直接在此处硬编码密码?

这一定是一场狂欢,并且期待两者兼而有之。我目前正在尝试通过源代码读取文件,$pass 给出密码。但在预期之内,它不起作用。

我不想加密/编码任何东西。我只是想保持简单。

答案1

我不确定正在发生的一切以及应该发生的事情,但是当你说

export snapshot_pw=snp_pw

您正在将环境变量设置snapshot_pw 为 string snp_pw。你可能想做

export snapshot_pw="$snp_pw"

将环境变量设置snapshot_pw价值变量snp_pw,即$snp_pw

另外,您应该引用 shell 变量"$mail_log" 和您使用的任何其他变量而不用引号。 (您不需要{}。)

答案2

一个最小的测试用例显示bashexpect确实读取相同的环境变量:

#!/bin/bash
export foo="bar$$"
echo "bash $foo"

expect <(cat <<'EOD'
puts "tcl  $env(foo)"
EOD
)

运行时,两种语言显示相同的值:

-bash-4.2$ bash mixin
bash bar7242
tcl  bar7242
-bash-4.2$ bash mixin
bash bar7247
tcl  bar7247
-bash-4.2$ 

因此不清楚您所说的“它没有阅读”是什么意思,也不清楚您对此代码的总体目标是什么。

答案3

您可以根据文件的内容设置一个变量,语法如下

snp_pw="$(cat passwd_file)"

例如

$ cat passwd_file 
anewpassword

$ cat x
#!/bin/bash

snp_pw=$(cat passwd_file)

echo Password is $snp_pw

$ ./x
Password is anewpassword

相关内容