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}
我如何從其他文件的變數中讀取密碼,而不是在這裡直接硬編碼密碼?
它必須是一個 bash 並期待兩者。我目前正在嘗試通過原始碼讀取文件,並且 $pass 提供密碼。但在預期之內,它不起作用。
我不想加密/編碼任何東西。我只想保持簡單。
我不確定正在發生的一切,以及應該發生的事情,但是當你說
export snapshot_pw=snp_pw
您正在將環境變數設置
snapshot_pw
為 strings
n
p
_
p
w
。你可能想做export snapshot_pw="$snp_pw"
將環境變數設置為變數的
snapshot_pw
值*,*snp_pw
即$snp_pw
。此外,您應該引用 shell 變數
"$mail_log"
和您使用的任何其他變數而不引用。(您不需要{
and}
。)
一個最小的測試案例表明兩者
bash
都expect
讀取相同的環境變數:#!/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$
所以不清楚你所說的“它沒有閱讀”是什麼意思,也不清楚你對這段程式碼的總體目標是什麼。