[bash] シェルスクリプトでgcloudが実行できない

shellscript
INDEX

はじめに

社内の作業効率化の取り組みで.shファイルでgcloudが実行できない現象が発生しました。
原因は、.envの改行コードでした。
その解消方法を紹介します。

再現

1. シェルスクリプトと.envファイルを作成する

.envファイルに定義されたバケット名を読み取る
ローカルにあるファイルをstorageにアップロードする

#!/bin/sh

# .envファイルのパス
ENV_FILE=".env"

# .envファイルの存在確認
if [ -f "$ENV_FILE" ]; then
    # .envファイルを読み込んで環境変数に設定
    export $(cat $ENV_FILE | xargs)
else
    echo "Error: $ENV_FILE が見つかりません。"
    exit 1
fi

gcloud storage cp --recursive -n files/* gs://$GCP_BUCKET_NAME/
GCP_BUCKET_NAME="sample_bucket"

2. シェルスクリプトを実行する

bash script.sh
実行結果を確認します。
$ bash script.sh
'RROR: (gcloud.storage.cp) HTTPError 400: Invalid bucket name: 'sample_bucket

もちろん、GCP上にsample_bucketというbucket名は存在するのに、
存在しないとErrorになる

原因

原因:.envファイルの改行コードがCRLFになっている事が原因でした。
CRLFLFに変換する必要があります!

解決

bash script.shを実行する前にdos2unix .envを実行する

dos2unix .env
bash script.sh

dos2unix: DOSやWindows環境で作成されたテキストファイルのCRLFをUnix/Linux環境で使われるLFに変換する事が出来ます

実行結果を確認します。
$ bash script.sh
Copying file://files\images\sampleimage.png to gs://sample_bucket/images/sampleimage.png

Average throughput: 1.2MiB/s
問題なくシェルスクリプトが実行出来ました!
よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

Born in 1994
Engineer's career is from 2020.10
Skill: Next.js, TypeScript, Django, Python, HTML, CSS

INDEX