私は現在、設定ファイルを解析するためのPerlスクリプトを書いています。構文は次のとおりです
{command parameter1 parameter2}
ここで、2番目のパラメーターはオプションです。{
そもそも、との間のコンテンツを抽出したいだけです}
。このコードを使用しています
while (<FILE>) {
chomp;
unless ($_ =~ m/^\/\//) {
$_ =~ /^\{(.*?)\}/s;
print $1;
}
print
コマンドの代わりに、文字列がさらに評価されます。私の今の問題は、スクリプトがいくつかの文字列で動作を停止することです
引数の前後に引用符がある限り、スクリプトは機能します。これ
{exec sed 's/ClientAliveInterval\ 300/ClientAliveInterval\ 1800/\' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new}
角かっこで囲まれた内容を返しますが、2番目のパラメーターが存在する可能性があるため、引用符なしでパラメーターを区別するのは困難になりました。
のような他の文字列
{exec "cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak"}
{exec "/etc/init.d/ssh reload"}
引用符を含めて、完全に機能します。
しかし今では、スラッシュやプラス記号(おそらく他の記号も含む)を含む引用符で囲まれた文字列は、この時点でperlスクリプトをフリーズするだけです。
{exec "chmod +x /root/setSSHTimer.sh"}
{exec "sed 's/ClientAliveInterval\ 300/ClientAliveInterval\ 1800/\' /etc/ssh/sshd_config > /etc/ssh/sshd_config.new"}
両方とも引用符で囲みます。最初の文字を「chmod770...」に書き換えると、再び機能します。
ここで問題を引き起こす原因は何ですか?