배경
쉘 스크립트는 많은 Java 소스 파일을 생성합니다. 소스 파일에는 Subversion 키워드가 포함 된 특정 헤더 주석이 있습니다. 목표는 내부에있는 소스 파일 헤더를 변경하지 않고 쉘 스크립트를 체크인하는 것입니다.쉘 스크립트의 키워드 확장 억제
문제
쉘 스크립트 키워드 확장을해야 자신의 헤더가 포함되어
#!/bin/bash
#
# Revision Control Information
# File: $Id:: autogenerate.sh 3142 2016-08-26 18:50:21Z USERNA#$
# Date of Last Commit: $Date:: 2016-08-26 11:50:21 -0700 (Fri, 26 Aug 2016) $
# Revision Number: $Rev:: 3142 $
# Last Commit by: $Author:: USERNAME $
이 부분 작품. 코멘트는 쉘 스크립트에서 나중에 포함 된 경우 실패 할 부분은 다음과 같습니다
cat <<EOT >> $FILENAME_IMPL
/*
* *********************************************************************
* Revision Control Information
* File: $Id:: $
* Date of Last Commit: $Date:: $
* Revision Number: $Rev:: $
* Last Commit by: $Author:: $
*
* **********************************************************************
*/
package com.company.pkg;
EOT
저장소에 쉘 스크립트를 확인, 키워드의 첫 번째 세트가 올바르게 확장됩니다; 그러나 Java 주석 헤더의 키워드도 확장됩니다. 일단 키워드가 확장되면 동일한 키워드에 대한 이후의 일치는 무시 될 것이라고 생각했습니다. 그렇지 않다. "
cat <<EOT >> $FILENAME_IMPL
/*
* *********************************************************************
* Revision Control Information
* File: $Id:: autogenerate.sh $
* Date of Last Commit: $Date:: 2016-08-26 11:50:21 -0700 (Fri, 26 Aug 2016) $
* Revision Number: $Rev:: 1234 $
* Last Commit by: $Author:: USERNAME $
*
* **********************************************************************
*/
package com.company.pkg;
EOT
자바 소스 파일 이름이"autogenerate.sh "되지 않습니다, 오히려 : 저장소에 확인
모든 자바 소스 파일의 상단에 추가됩니다 주석을 변경 ClassName.java "를 참조하십시오.
가 명확히 해명은, autogenerate.sh
라는 다음과 같은 간단한 쉘 스크립트를 고려가 : 스크립트가 저장소에 체크인
#!/bin/bash
# File: $Id:: $
FILENAME_IMPL=ClassName.java
cat <<EOT >> $FILENAME_IMPL
/* File: $Id:: $
*/
package com.company.pkg;
EOT
, 그 내용이 될 :
#!/bin/bash
# File: $Id:: autogenerate.sh $
FILENAME_IMPL=ClassName.java
cat <<EOT >> $FILENAME_IMPL
/* File: $Id:: autogenerate.sh $
*/
package com.company.pkg;
EOT
첫 번째 $Id::
키워드가 올바르게 대체되었습니다. 두 번째 $Id::
키워드는 무시해야합니다. 내가 저장소에 스크립트를 검사 할 때 즉, 내가보고 싶은 : 도움이되지 않았다 키워드를 이스케이프
#!/bin/bash
# File: $Id:: autogenerate.sh $
FILENAME_IMPL=ClassName.java
cat <<EOT >> $FILENAME_IMPL
/* File: $Id:: $
*/
package com.company.pkg;
EOT
아이디어
. 예를 들면 :
cat <<EOT >> $FILENAME_IMPL
/* File: \$Id:: $
*/
package com.company.pkg;
EOT
질문
Subversion 저장소에 검사 할 때 어떻게 방지하거나 일치하는 첫 번째 키워드하지만 모든 키워드 확장을 억제하는 것?