나는 다른 프로세스(터미널에서 비밀번호를 요청하는 프로세스)를 호출하는 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 으로 설정하고 있습니다 s
n
p
_
p
w
. 당신은하고 싶을 수도 있습니다
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