
という名前のフォルダがありMyProperties
、その中に、、など.properties
の複数のファイルが含まれています。各ファイルには次のような内容が含まれています:1.properties
2.properties
3.properties
keyname=value
プロパティ ファイルの値としてここに何を記述すれば、割り当てまたは置換されるのでしょうか? bash スクリプトでこれらを反復処理して、キーに値を割り当てるにはどうすればよいのでしょうか?
疑似コード:
#!/bin/bash
valuetobepassed="something"
#iterate over each file in the folder and replace/assign value corresponding to keyname
答え1
sed
ファイル内の値を置き換えるために使用できます:
#!/bin/bash
new_value=5
for f_name in MyProperties/*.properties; do
sed -i "s/^keyname=.*$/keyname=$new_value/" "$f_name"
done
答え2
本当にvarName=value
ペアのファイルが複数ある場合は、ソースすべてのファイルを反復処理し.properties
、それぞれをソースします。
for file in /path/to/MyProperties/*.properties; do
. "$file"
done
これで、スクリプトですべての変数が定義されました。例を挙げると、
$ cat foo.properties
foo="bar"
$ echo "$foo" ## no value
$ . ./foo.properties
$ echo "$foo"
bar
これは、.properties
ファイルが変数=値のペアのみソースを取得すると、ソースを取得するスクリプトを実行しているシェルでファイルの各行が実行されます。したがって、.properties
ファイル内のコマンドも実行されます。また、アクセス権を持つ攻撃者は、MyProperties
そこに悪意のあるコマンドを追加できます。したがって、ファイルの内容が確実な場合にのみ、これを実行してください。
.
組み込みに指定されたパスに 文字が含まれていることが重要であることに注意してください/
(./foo.properties
上記のとおり)。含まれていない場合、ファイルは現在のディレクトリではなく のディレクトリで検索されます$PATH
( の場合、bash
および が POSIX 準拠モードでない場合、 で見つからない場合、 は現在の作業ディレクトリで. file
検索します)。file
$PATH