2012-08-07 14 views
7

में एक पंक्ति को अपनाना मैं कठपुतली में आ रहा हूं, और इसे प्यार करता हूं, लेकिन एक दीवार के खिलाफ एक छोटी सी चीज के साथ अपना सिर मार रहा हूं जो मुझे यकीन है कि मैं इसे बनाना चाहता हूं।कठपुतली

मैं एक उपयोगकर्ता के .bashrc में इस लाइन uncomment करना चाहते हैं:

#force_color_prompt=yes 

मैं चीजों के बहुत सारे के लिए augeas उपयोग कर रहे हैं, लेकिन ऐसा लगता है जैसे कि यह है कि इस के साथ काम नहीं करेगा।

मुझे लगता है कि file_line संसाधन है जिसका उपयोग मैं फ़ाइल में एक लाइन मौजूद होने के लिए कर सकता हूं, लेकिन मुझे उसी स्थान पर रहने की लाइन की आवश्यकता है।

मैं .bashrc को अपनी खुद की प्रतिलिपि से पूरी तरह से प्रतिस्थापित नहीं करना चाहता हूं, यह देखते हुए कि यह पैटर्न कठपुतली में लोकप्रिय है, यह मुझे समझ में नहीं आता है क्योंकि मैं अपना खुद का संस्करण बनाए रखना नहीं चाहता उन्नयन।

sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" ~/.bashrc 

कोई भी विचार:

एसईडी में मैं इस का उपयोग करें?

उत्तर

6

आप grep का उपयोग करते हुए एक विकल्प के साथ अपने sed आदेश को निष्पादन में जोड़ सकते हैं। इस (untested) की तरह कुछ:

exec { 'force_color_prompt': 
    command => 'sed -i "s/#force_color_prompt=yes/force_color_prompt=yes/g" .bashrc' 
    cwd  => '/home/user', 
    shell  => true, 
    unless => 'grep -Fxq "force_color_prompt=yes" .bashrc', 
} 

या file_line संसाधन आप का उल्लेख का उपयोग करें (कठपुतली लैब्स stdlib मॉड्यूल मेरा मानना ​​है कि का हिस्सा) uncommented लाइन जोड़ सकते हैं और टिप्पणी की लाइन अछूता छोड़ दें।

+0

आप मेरे नायक हैं, धन्यवाद! केवल लाइन नहीं जोड़ सकता, क्योंकि स्क्रिप्ट के भीतर स्थान महत्वपूर्ण है, लेकिन आपका सुझाव बहुत अच्छा है। धन्यवाद :) – Ludo

6

मेरे अनुभव में, file_line रेगेक्स से मेल खाने वाली रेखा को प्रतिस्थापित करेगा। ,

file_line { 
    'color_prompt': 
     path  => '/home/<youruser>/.bashrc', 
     match  => 'force_color_prompt', 
     line  => "force_color_prompt=yes", 
} 

महत्वपूर्ण बात regex से मेल खाता है, की जगह जगह, यानी में होता है अगर:

तो force_color_prompt=yes बनाम #force_color_prompt=yes आप कर सकते थे प्राप्त करने के लिए। यह लाइन के स्थान पर नहीं, लाइन बदल जाएगा। यदि रेगेक्स मैच नहीं करता है, तो लाइन फ़ाइल के अंत में जोड़ दी जाएगी।

यह अनुभव कठपुतली 3.1 के साथ है।

संदर्भ: https://forge.puppetlabs.com/puppetlabs/stdlib

0

अकेले Augeas ऐसा नहीं कर सकते हैं, Augeasproviders से shellvar प्रदाता यह करने के लिए, जब भी this PR विलय कर दिया है सक्षम हो जाएगा।

1

shellvar पहले से ही uncomment कर सकते हैं लाइनों

shellvar { '.bashrc': 
    ensure => present, 
    target => "/home/${your_user}/.bashrc", 
    variable => 'force_color_prompt' 
    uncomment => true, 
} 

मैं कार्यकारी का उपयोग करने और एसईडी बुला की तुलना में बहुत क्लीनर इस अनुभव।

संबंधित मुद्दे