背景
シェルスクリプトは、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
は、Javaソースのファイル名は「autogenerate.sh」ではありませんが、むしろ:リポジトリにチェックイン
は、すべてのJavaソースファイルの先頭に追加されたコメントを変更しますClassName.java "明確にするために
明確化
、autogenerate.sh
と呼ばれる次のような単純なシェルスクリプトを検討:最初
#!/bin/bash
# File: $Id:: autogenerate.sh $
FILENAME_IMPL=ClassName.java
cat <<EOT >> $FILENAME_IMPL
/* File: $Id:: autogenerate.sh $
*/
package com.company.pkg;
EOT
:
#!/bin/bash
# File: $Id:: $
FILENAME_IMPL=ClassName.java
cat <<EOT >> $FILENAME_IMPL
/* File: $Id:: $
*/
package com.company.pkg;
EOT
スクリプトがリポジトリにチェックされている場合は、その内容になると$Id::
キーワードが正しく置き換えられました。 2番目の$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リポジトリへのチェックイン時にどのように防ぐか、最初に一致したキーワードが、すべてのキーワードの拡張を抑制するのでしょうか?