2012-08-07 3 views
7

저는 꼭두각시에 들어갔고 그것을 좋아 합니다만, 내가 만든 것보다 더 쉬워야 할 하나의 작은 것으로 벽에 머리를 내리고 있습니다. 나는 많은 것들에 대한 augeas을 사용하고꼭두각시의 줄을 주석 처리 해제하십시오.

#force_color_prompt=yes 

하지만이 작동하지 않습니다 것처럼 보인다 :

나는 사용자의 .bashrc이 행의 주석을 해제하고 싶습니다.

파일에 행이 있는지 확인하기 위해 사용할 수있는 리소스는 file_line이지만 동일한 위치에 있어야합니다.

.bashrc을 완전히 복제하고 싶지는 않습니다.이 패턴이 퍼핏에서 인기가 있음에도 불구하고, 내 자신의 버전을 유지하고 싶지 않기 때문에 이해가되지 않습니다. 업그레이드.

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

어떤 아이디어 : SED에서

나는 이것을 사용할 수 있습니까?

답변

6

grep을 사용하여 unless 옵션을 사용하여 exec에 sed 명령을 추가하기 만하면됩니다. 이 (안된)와 같은 뭔가 :

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 모듈의 일부) 주석 라인을 추가하고 훼손되지 않은 주석 라인을두고있다.

+0

당신은 내 영웅입니다. 고마워요! 스크립트 내 위치가 중요하지만 제안 사항이 훌륭하기 때문에 라인을 추가 할 수는 없습니다. 감사 :) – Ludo

6

내 경험상 file_line은 정규식과 일치하는 행을 대체합니다. 일치 정규식의 대체 즉 장소에 를 발생하는 경우,

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

중요한 :

그래서 당신이 할 수 force_color_prompt=yes#force_color_prompt=yes를 얻을 수 있습니다. 선의 위치가 아니라 선을 변경합니다. 정규식이 이 아닌 경우과 일치하면 파일 끝에 줄이 추가됩니다.

이 경험은 Puppet 3.1과 같습니다.

참조 : 혼자 Augeas 그것을 할 수는 없지만 https://forge.puppetlabs.com/puppetlabs/stdlib

0

, Augeasproviders에서 shellvar 공급자가 this PR 병합 될 때마다, 그것을 할 수있을 것입니다.

1

shellvar 이미 주석을 해제 할 수 있습니다 라인

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

나는 간부를 사용하고 SED 호출하는 것보다 훨씬 청소기이 인식.

관련 문제