2017-11-08 16 views
1

인형 배우기 인형이며 현재 Tomcat을 설치하려고합니다. 실행 블록에서 sed를 사용하여 startup.sh에서 Catalina 집을 대체하려고 시도하는 동안 Im은 아래 오류를 직면했습니다. startup.shPuppet sed 및 replace

export CATALINA_HOME="/home/john" 
export JAVA_HOME="/usr" 
...... 
..... 

예상 출력

export CATALINA_HOME="/home/john/apache-tomcat-6.0.44" 
export JAVA_HOME="/usr/java/default" 

내 코드

....... 
    exec { 'modify_file': 
    command => "sed -i 's|export CATALINA_HOME="/home/john"|export CATALINA_HOME="/home/john/apache-tomcat-6.0.44"|g' /home/john/apache-tomcat-6.0.44/bin/startup.sh" 
    path => '/bin', 
} 

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Syntax error at '|export CATALINA_HOME=' at /etc/puppetlabs/code/environments/production/modules/tomcat/manifests/init.pp:26:58 on node agent

현재 값이 어떤 도움이 정말 사전에 감사합니다, 감사합니다.

또한, 나는 exec 블록의 path atrribute에 관한 꼭두각시 문서를 살펴 봤지만 왜 이것이 사용되고 있는지 그리고 내 매니페스트 파일에서 내 경로 값이되어야하는지 잘 모르겠다.

답변

2

sed 표현식이 인용 불일치로 인해 깨질 수 있습니다.

당신은 사용하여 sed 명령을 단순화 할 수 있습니다 :

sed -i '/CATALINA_HOME=/s,/home/john,&/apache-tomcat-6.0.44,;/JAVA_HOME=/s,/usr,&/java/default,' /home/john/apache-tomcat-6.0.44/bin/startup.sh 

표현은 CATALINA_HOMEJAVA_HOME 모두 2 명령이 포함되어 있습니다. 두 명령 모두 동일한 구문을 사용하여 필요한 문자열을 변수 선언에 추가합니다.

/<regex>/s<regex>과 함께 라인에서 대체를 수행합니다.

,은 명령 구분자입니다. 검색 할 패턴이 디렉토리 경로가 아니면 일반적으로 /을 사용합니다.

&은 패턴 공간, 즉 매치 된 패턴을 인쇄하고있다.

+0

귀하의 의견을 주셔서 감사합니다 ..하지만 여전히 대상 파일이 변경되지 않습니다 아래의 블록 '명령 => "나오지도 '/ CATALINA_HOME =/S,/홈/존 ,/apache-tomcat-6.0.44,/JAVA_HOME =/s,/usr 및/java/default, '/home/john/apache-tomcat-6.0.44/bin/startup.sh ", 경로 => '/ bin', ' 내가 바보 같은 것을 놓치고 있습니까? – Goku

+0

'sed' 명령의'-i' 옵션을 잊어 버린 경우 파일 내에서 교체하십시오. 재 시도하고 오류 메시지가 있으면 입력하십시오. – oliv

+0

정말 고맙습니다. 여기에 시간을 내 주셔서 대단히 감사합니다. 친절하게도/s, and, and 부분을 설명 할 수 있습니다. 정확히 뭐랬는지 .. 다시 .. 감사합니다. – Goku

2

exec 호출을 수행하는 대신 puppetlabs-stdlib 모듈의 file_line 리소스 유형을 사용해 보았습니까?

어떻게 작동하는지 알 수 있습니다. here.

일치 매개 변수는 이전 값을 받고 line 매개 변수의 값으로 대체됩니다. 예를 들어 :

file_line { 'catalina': 
    ensure => present, 
    path => '/etc/catalina/startup.sh', 
    line => 'export CATALINA_HOME=\"/home/john/apache-tomcat-6.0.44\"', 
    match => 'export CATALINA_HOME=\"/home/john\"', 
} 
+0

예를 들어 주셔서 감사합니다. 지금 당장 BTW를 사용해 보았습니다. 성공하지 못했으며 임원과 함께했습니다. – Goku

+0

문제는 보낼 수 있습니까? – Mdmansur

+0

제안 사항을 사용하여 문제를 해결했습니다. 감사합니다. – Goku