![Exec은 사전 설정된 스크립트 출력 중에 일부 Bash 함수 및 변수의 값을 업데이트하지 않습니다.](https://linux55.com/image/15688/Exec%EC%9D%80%20%EC%82%AC%EC%A0%84%20%EC%84%A4%EC%A0%95%EB%90%9C%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%B6%9C%EB%A0%A5%20%EC%A4%91%EC%97%90%20%EC%9D%BC%EB%B6%80%20Bash%20%ED%95%A8%EC%88%98%20%EB%B0%8F%20%EB%B3%80%EC%88%98%EC%9D%98%20%EA%B0%92%EC%9D%84%20%EC%97%85%EB%8D%B0%EC%9D%B4%ED%8A%B8%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
저는 Bash에 메시지를 기록하고 컨텍스트를 제공하는 데 도움이 되는 몇 가지 유용한 정보를 로그 메시지에 추가합니다. 하지만 최종 출력에서는 대부분의 변수와 함수가 초기 값만 사용하고 매번 업데이트되지 않는 것 같습니다.
나는 그것을 다음 코드로 요약하려고 노력합니다.
#!/bin/bash
# Define a timestamp function
function timestamp() {
date +"%Y-%m-%d %H:%M:%S" # current time
}
# Define variable
a1="No"
# Function to check variable value
function var_func() {
echo "${a1}"
}
# File to record log messages in
log_file="$(pwd)/output.csv" # log file for this script
# Clear log if existing file and send first log msg
echo "Script Initializing" > >(while IFS= read -r line;
do printf '%s, %s, %s, %s\n' "$(timestamp)" "$(pwd)" "${a1}" "${line}";
done > "${log_file}")
# Code to execute on future messages
exec >> >(while IFS= read -r line;
do printf '%s, %s, %s, %s\n' "$(timestamp)" "$(pwd)" "${a1}" "${line}";
done > >(tee -a -i "${log_file}")) 2>&1
echo "a1=${a1} and dir=$(pwd)"
a1="Yes"
if [ ! -d "$(pwd)/test" ]; then
mkdir "$(pwd)/test"
fi
cd "$(pwd)/test"
echo "a1=${a1} and dir=$(pwd)"
내가 얻는 결과는 다음과 같습니다.
2021-06-27 17:38:24, .../Help, No, Script Initializing
2021-06-27 17:38:24, .../Help, No, a1=No and dir=.../Help
2021-06-27 17:38:24, .../Help, No, a1=Yes and dir=.../Help
예상되는 출력은 다음과 같습니다.
2021-06-27 17:38:24, .../Help, No, Script Initializing
2021-06-27 17:38:24, .../Help, No, a1=No and dir=.../Help
2021-06-27 17:38:24, .../Help/test, Yes, a1=Yes and dir=.../Help/test
즉, 이 명령은 exec
호출될 때만 timestamp
sum 값을 업데이트하는 것처럼 보입니다 line
. 왜 이러한 업데이트가 pwd
이루어지고 a1
초기 값을 재사용하는지 이해할 수 없습니다 .
내가 여기서 무엇을 놓치고 있는 걸까요? 더 유용한 세부정보도 제공할 수 있으면 알려주시기 바랍니다.
감사해요!
감사합니다,
실험적