シェルスクリプトの設定ファイルで変数を保存して更新する方法[閉じる]

シェルスクリプトの設定ファイルで変数を保存して更新する方法[閉じる]

私は何かをしていますが、特別な要求があります。

ファイルに3つの変数を定義するシナリオがあります。jenkins特定のタスクが実行されるたびに、これらの変数を使用してコンテナ環境を作成します。

最初はこの3つの変数を数値に設定するつもりですが、毎回インクリメントし、次回の実行時に更新された値が使用されるようにどこかに保存する必要があります。

ベストアンサー1

以下は、変数を含む構成ファイルを呼び出し、~/.myprogram.confシェルスクリプトを呼び出し、myprogram変数は、var1var2仮定します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--

おすすめ記事