私はsh:でスクリプトを書いています。
- 構成ファイルの読み取り
{{ value_0000 }}
検索間の各値について0000
0000
パラメーターとして渡された値を使用してコマンドを実行します。{{ value_0000 }}
次へ交換出力このコマンドの
メモ:
value_0000
常に数値に変換してください。0000
- コマンドは常に同じです。
/bin/command <value>
- 現在、設定ファイルを編集したくありません。メモリから実行できます。
例:
# this is a config file
key: {{ value_12345 }}:hello
something
another_key: return:{{ value_56789 }}/yeah
./run.sh
# this is a config file
key: returned-value:hello
something
another_key: return:another-returned-value2/yeah
設定ファイルから値を取得できますが、期待どおりに機能するにはより多くのコードが必要です。
#!/bin/sh
cat some.conf | while read line
do
echo $line
val="$(grep -o -P '(?<={{ value_).*(?= }})')"
command $val
done
ベストアンサー1
そしてperl
:
perl -pe 's(\{\{ value_(\d+) \}\})(`cmd $1`)ge' < some.conf
ここでは、シェルをバイパス$1
しても空ではなく、シェル構文に特殊文字(数字のみ)が含まれないことが保証されるので安全です。perl
ただし、\d+
(1つ以上の数値シーケンス)を別のものに変更すると危険になり(たとえば、などの値の場合foo;reboot
)、次のようにより安全なアプローチを取ることができます。
perl -pe '
s(\{\{ value_(.*?) \}\})(
open my $fh, "-|", "cmd", $1 or die "cannot start cmd: $!";
local $/ = undef;
<$fh>;
)ge' < some.conf
オプションが許可されている場合(および可能であれば)で始まる値に関連する問題を回避するために、または(オプションの終了マークとしてサポートされていると仮定)にcmd
置き換える必要があります。"cmd"
"cmd", "--"
qw(cmd --)
--
-
+