쉘 스크립트의 구성 파일에서 변수를 저장하고 업데이트하는 방법 [닫기]

쉘 스크립트의 구성 파일에서 변수를 저장하고 업데이트하는 방법 [닫기]

제가 뭔가 작업을 하고 있는데 특별한 요청이 있습니다.

파일에 3개의 변수를 정의하는 시나리오가 있습니다. jenkins특정 작업이 실행될 때 마다 이러한 변수를 사용하여 컨테이너 환경을 생성합니다.

처음에는 이 3개 변수를 숫자로 설정할 생각인데, 매번 증가시키고 다음 실행 시 업데이트된 값이 사용되도록 어딘가에 저장해야 합니다.

답변1

다음은 변수가 포함된 구성 파일을 호출 ~/.myprogram.conf하고 쉘 스크립트를 호출하며 myprogram변수는 var1, var2및 이라고 가정합니다 var3. 실제 요구 사항에 맞게 이 예제를 조정하세요.

초기 상태 ~/.myprogram.conf는 다음과 유사합니다.

var1=1
var2=1000
export var3=5

export var=value구성 파일은 쉘 스크립트 조각이므로 위에 표시된 것처럼 스크립트에 의해 호출된 외부 프로그램이 변수에 액세스해야 하는 경우 사용할 수 있습니다 var3.

변수를 사용하기 전에 스크립트 myprogram는 해당 구성 파일 어딘가에 다음을 추가합니다.source

. ~/.myprogram.conf

변수를 저장해야 하는 경우, 즉 변수를 변경한 후 typeset -p이상한 참조 문제로 인해 문제가 발생할 위험 없이 변수를 다시 쉘 스크립트로 덤프할 수 있는 양식을 사용할 수 있습니다. source이는 문자열, 정수, 배열, 연관 배열 등 모든 값을 포함하는 모든 유형의 변수에 대해 작동합니다.

typeset -p var1 var2 var3 > ~/.myprogram.conf

또는 bash에서 이에 상응하는 내용은 다음과 같습니다.

declare -p var1 var2 var3 > ~/.myprogram.conf

( 및 동의어로 bash지원됩니다 . 다른 쉘, 예를 들어 변형 만 이해함 )typesetdeclarekshtypeset

경고하다:프로그램의 다른 실행 중인 인스턴스나 다른 프로그램이 이를 수정하는 경우 ~/.myprogram.conf이 시점에서 덮어쓰게 되며 이전에 다른 프로그램에서 변경한 내용이 손실됩니다. 이는 프로그램의 여러 인스턴스를 동시에 실행하는 경우에만 중요합니다.

필요한 경우 잠금 파일을 사용하여 동시 액세스를 방지할 수 있습니다(단, 다른 프로그램이 너무 오래 기다리지 않도록 잠금을 최대한 짧게 유지하는 것을 기억하세요).

예를 들어 위의 샘플 conf 파일을 사용하여 다음 스크립트를 실행합니다.

#!/bin/bash

conf="~/.myprogram.conf"

. "$conf"

var1=$((var1 + 20))
var2=$((var2 * 2))
var3=$((var3 -5))

typeset -p var1 var2 var3 > "$conf"

결과는 ~/myprogram.conf다음과 같습니다.

declare -- var1="21"
declare -- var2="2000"
declare -x var3="0"

내보낸 상태는 단순히 기억되는 것이 아니라 var3전달됩니다 .-x--

관련 정보