Bash

將變數從另一個文件讀入 bash

  • December 5, 2018

我編寫了一個 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}

我如何從其他文件的變數中讀取密碼,而不是在這裡直接硬編碼密碼?

它必須是一個 bash 並期待兩者。我目前正在嘗試通過原始碼讀取文件,並且 $pass 提供密碼。但在預期之內,它不起作用。

我不想加密/編碼任何東西。我只想保持簡單。

我不確定正在發生的一切,以及應該發生的事情,但是當你說

export snapshot_pw=snp_pw

您正在將環境變數設置snapshot_pw 為 string snp_pw。你可能想做

export snapshot_pw="$snp_pw"

將環境變數設置為變數的snapshot_pw 值*,*snp_pw$snp_pw

此外,您應該引用 shell 變數"$mail_log" 和您使用的任何其他變數而不引用。(您不需要{and }。)

一個最小的測試案例表明兩者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$ 

所以不清楚你所說的“它沒有閱讀”是什麼意思,也不清楚你對這段程式碼的總體目標是什麼。

引用自:https://unix.stackexchange.com/questions/486018