他のファイルの変数を 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 文字列に設定していますsnp_pw。やりたいかもしれません

export snapshot_pw="$snp_pw"

環境変数をsnapshot_pw 次に設定します。変数snp_pw、つまり$snp_pw

また、"$mail_log" 引用符なしで使用するシェル変数やその他の変数を引用する必要があります。 ({およびは必要ありません}。)

答え2

最小テストケースは同じ環境変数を表示し、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$ 

したがって、「未読」が何を意味するのか、このコードの全体的な目標が何であるかは不明です。

答え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

関連情報