Jenkins CI / CDソフトウェアでビルドジョブを作成しています。ビルドタスクはGithubで私のAndroidプロジェクトを複製し、APKを生成します。 Ubuntu 20.04 LTSサーバーオペレーティングシステムを使用しています。
ビルドステップの一環として、Jenkinsを介して次のコマンドを実行します。
rm -r app/src/main/java/in/myproj/utils/Constants.kt
しかし、次のエラーが発生しました。
/tmp/jenkins10737829520192897047.sh: 1: Syntax error: "in" unexpected
in
bashはフォルダ名をConstant
。どんな助けでも大変感謝します。
編集する:
問題をより詳細にデバッグして実際の原因を見つけました。これはrm
コマンドの失敗ではありません。いくつかのコードスニペットをファイルに追加する別のビルド手順があります。実際に失敗したコードスニペットは次のとおりです。
cat << EOT >> app/src/main/java/in/myproj/utils/Constants.kt
"package `in`.myproj.utils
class Constants {
companion object {
const val BASE_URL = "https://api.example.in/api/"
const val BASE_URL_IMAGE_ADDRESS = "https://dashboard.example.in:5555/"
const val BASE_URL_PROFILE_IMAGE_ADDRESS = "https://api.example.in/"
const val ABOUT_US_URL = "https://example.in/aboutus.html"
const val PRIVACY_POLICY_URL = "https://example.in/privacy-policy.html"
const val TERMS_AND_CONDITIONS_URL = "https://example.in/terms-condition.html"
const val REQUEST_TIMEOUT_DURATION = 10
const val STATUS_SUCCESS = 1
答え1
問題はEOTをどのように使用するかである。使用時引用しないwordは、書き込み前に内容がシェルによって拡張される区切り文字の区切り文字として機能します。説明したようにバッシュマニュアル:
単語の一部が引用されている場合、区切り文字は単語から引用符を削除した結果であり、文書の行はここでは拡張されません。単語が引用されていない場合、here-documentのすべての行はパラメータ拡張、コマンド置換、および算術拡張を受けます。文字の順序\newlineは無視され、 '\'、 '$文字を引用するには '\'を使用する必要があります。 「そして」。
したがって、`in`
シェルはheredocから読み取られた内容をコマンドに置き換えるため、コマンドを実行し、in
その出力を返します。
実際、これは以下を引用する必要があることを意味しますEOT
。
cat << 'EOT' >> app/src/main/java/in/myproj/utils/Constants.kt
これは、ここにあるドキュメントにある可能性のあるすべての変数が拡張されていないことを意味しますが、質問に何も表示されないため、これは問題ではないと仮定します。