私は何かをしていますが、特別な要求があります。
ファイルに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
サポートされています。他のシェル、たとえばバリアントのみを理解する)typeset
declare
ksh
typeset
警告する:プログラムの他の実行中のインスタンスまたは他のプログラムがそれを変更すると、この時点で上書きされ、~/.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
--