🐼
[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
問題なくシェルスクリプトが実行出来ました!
YouTube のご案内
ポモドーロタイマー(25 分勉強+ 5 分休憩)を活用した作業・勉強配信を行っています。
集中したいときや、誰かと一緒に頑張りたいときに、ぜひご活用ください。
ご興味のある方は、ぜひお気軽に遊びに来てください!
「Zenn から来ました!!」とコメントを貰えると泣いて喜びます 🤣
Discussion