Bash에서 변수를 "캐시"하는 방법은 무엇입니까?

Bash에서 변수를 "캐시"하는 방법은 무엇입니까?

10m마다 실행되는 bash 스크립트가 있습니다 cron. 스크립트는 특정 값(예: 변수 x = 값)에 대해 비용이 많이 드는 계산을 수행합니다. 이 값을 2~3시간 동안 "캐시"해야 합니다. 이 문제에 대한 가능한 해결책은 무엇입니까?

나는 노력했다메모리 캐시하지만 bash에서는 잘 작동하지 않는 것 같습니다.

答え1

실제 계산을 수행하고 결과를 파일에 저장하는 두 번째 스크립트를 작성합니다.

# calculate $curval
printf '%s' "$curval" > /var/foo/value.txt

2~3시간마다 실행되도록 예약합니다 cron.

"10분마다" 스크립트에서는 파일에서 현재 값을 읽습니다.

curval=$(< /var/foo/value.txt)

value.txt좋은 개선점은 파일이 아직 존재하지 않는 경우 "10분마다" 스크립트에서 계산 스크립트를 호출하는 것입니다. crontab항목이 누락된 경우 항목을 추가하도록 할 수도 있습니다.

答え2

결과를 파일에 기록하고 파일에 변수를 설정하는 데 동의합니다.

curval=the_value

그런 다음 셸(또는 다른 스크립트)에서

source current_variable_value_result_file

答え3

간단한 일반 텍스트 파일에 변수를 저장할 수 있습니다.

이를 위해 두 가지 bash 기능을 사용합니다.

# the cache file in /tmp
CACHE_FILE="/tmp/your-file.txt"
touch "$CACHE_FILE"

# Set a cache/key value in your text file us `=` as separator
function set_cache() {
  echo -e "$1=$2" >> "$CACHE_FILE"
}

# grep the key in the cache file and extract the value using awk
function get_cache() {
  grep -F "$1" "$CACHE_FILE" | awk -F"=" '{print $2}'
}

완벽과는 거리가 멀고 키에 선택한 구분 기호 값(여기)이 포함되어 있으면 작동하지 않지만 =좋은 시작이며 많은 도움이 되었습니다.

두 번째 cron 작업은 캐시 파일을 주기적으로 삭제할 수 있다고 생각합니다.

関連情報