2017-09-04 14 views
0

私はこのような文字列を持っています。前のスペースに注意してください。私はこの文字列を含むこの行を置き換えたいと考えました>"${WLS_REDIRECT_LOG}"シェフとルビーを使用して文字列を交換する

 ${JAVA_HOME}/bin/java ${JAVA_VM} ${MEM_ARGS} -Dweblogic.Name=${SERVER_NAME} -Djava.security.policy=${WLS_POLICY_FILE} ${JAVA_OPTIONS} ${PROXY_SETTINGS} ${SERVER_CLASS} >"${WLS_REDIRECT_LOG}" 2>&1 

私の正規表現は、私は正規表現で良いことはないですラインに

mynewline = "TESTTTIIINGGG!!!" 
ruby_block "Editing File" do 
    block do 
    fe = Chef::Util::FileEdit.new("myFile.sh") 
    fe.search_file_replace_line(/*>"${WLS_REDIRECT_LOG}"*/, mynewline) 
    fe.write_file 
    end 
    #only_if { File.read("myFile.sh") 
end 

に合わせて正しいかどうか私は知りません。あなたはそのためにシェフを必要としない

+0

「私を助けてください」と言われる質問は、ローカライズされた手引きや場合によっては、Q&Aフォーマットに適さない進行中または私的な支援を求めている傾向があります。それはむしろあいまいであり、より具体的な質問に置き換えられるほうがよい。 [なぜ誰かが私を助けることができるのですか?」という実際の質問ではないのはなぜですか?](// meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-actual-question )。 – halfer

答えて

2

、昔ながらの良いルビーは大丈夫です:

corrected = File.read('myFile.sh') 
corrected[/>"\$\{WLS_REDIRECT_LOG\}"/] = "TESTTTIIINGGG!!!" 
File.write('myFile.sh', corrected) 

さらに詳しい情報:String#[]=

+0

リソースの外部にあると、通常は予期しない影響があります。 – coderanger

1

FileEditはシェフの内部APIであり、クックブックコードでの使用はお勧めしません。他の答えで述べたように他のRubyコードを使用することはできますが、一般にこの種のアプローチは非常に脆弱です。完全に収束した置換えを作成することは、しばしば困難で、時には不可能です。カスタムリソースとして表現されたより洗練されたAPIの例については、linepoise-fileなどの料理の書籍をチェックしてください。可能であれば、templatecookbook_fileなど完全に収束するリソースを使用することをおすすめします。

関連する問題