🐼
[bash] シェルスクリプトでgcloudが実行できない
はじめに
社内の作業効率化の取り組みで .sh ファイルで gcloud が実行できない現象 が発生しました。
原因は、.env の改行コードでした。
その解消方法を紹介します。
再現
1. シェルスクリプトと.envファイルを作成する
.envファイルに定義されたバケット名を読み取る
ローカルにあるファイルをstorageにアップロードする
script.sh
#!/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になる
原因
解決
dos2unix: DOSやWindows環境で作成されたテキストファイルのCRLFをUnix/Linux環境で使われるLFに変換する事が出来ます
dos2unix .env
bash script.sh
実行結果を確認します。
$ bash script.sh
Copying file://files\images\sampleimage.png to gs://sample_bucket/images/sampleimage.png
Average throughput: 1.2MiB/s
問題なくシェルスクリプトが実行出来ました!
Discussion