다른 파일의 변수를 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.

또한 "$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

관련 정보