実現したいこと
シェルスクリプトのファイル内にcurlコマンドを実行する行があります。
URLは直書きせず、環境変数から取り込みます。
スクリプトを実行する前に環境変数を設定するためのファイルを置きます。
env.sh
bash
1export CURL_URL=https://test.com
スクリプト内で上記で置いたファイルをsourceコマンドで取り込みます。
そのあと、curlコマンドを実行します。
test.sh
bash
1#!/usr/bin/env bash 2 3source ./env.sh 4curl ${CURL_URL} -X POST
発生している問題・分からないこと
curlコマンドの実行エラーとなってしまいます。
環境変数の中身は問題ありません。
> ./test.sh curl: (3) URL using bad/illegal format or missing URL
環境変数がちゃんと設定されているか確認
test.sh
bash
1#!/usr/bin/env bash 2 3source ./env.sh 4echo ${CURL_URL} 5curl ${CURL_URL} -X POST
結果
https://test.com curl: (3) URL using bad/illegal format or missing URL
環境変数を使わず直書きした場合は問題ありません。
test.sh
bash
1#!/usr/bin/env bash 2 3curl https://www.test.com -X POST
また、sourceコマンドで取り込まず、shを実行する前にコマンドラインでexportをした場合も問題ありません。
> export CURL_URL=https://test.com > ./test.sh
なぜか、スクリプト内のsourceコマンドで取り込んだ環境変数をcurlでコマンドで使用することができないのです。
とても特殊な状況なのか、調べても同様の事象がヒットしませんでした。
エラーメッセージ
curl: (3) URL using bad/illegal format or missing URL
試したこと
環境変数の書き方の問題かと思い、以下も全て試しましたが同じエラーです。
curl "${CURL_URL}" curl ${CURL_URL} curl CURL_URL curl $(echo ${CURL_URL})
### 調べたこと - [x] teratailやGoogle等で検索した - [x] ソースコードを自分なりに変更した ##### 上記の詳細・結果 Web上で同様の事例がなく、解決に至らなかった。
> CURL_URL=https://www.test.com
この場合、CURL_URL はシェル変数として定義されます。環境変数として定義する場合は export を付けます。
export CURL_URL='https://www.test.com'
printenv CURL_URL # 確認
書き方を見るに環境変数になっていないように見えます。bashで実行している場合、下記のようにexportをつけて実行すると環境変数になります。
```
export CURL_URL=https://www.test.com
```
上記を実行してシェルスクリプトを試すとどうなりますか。
(環境変数について)
シェル変数と環境変数の違いをコマンドラインで確認する
https://qiita.com/kure/items/f76d8242b97280a247a1
コメントありがとうございます。
試してみましたが結果は同じでした。
質問内容を編集してあります。
bash に "-x" オプション(実行過程をトレース)を付けて実行してみてはどうでしょうか。
# 手元の環境は Ubuntu Linux 24.04/bash 5.2.21
bash -x test.sh
+ source ./env.sh
++ export CURL_URL=https://test.com
++ CURL_URL=https://test.com
+ echo https://test.com
https://test.com
+ curl https://test.com -X POST
以下の結果になりました。
curl: no URL specified!
curl: try 'curl --help' or 'curl --manual' for more information
env.sh の文字コードがおかしかったり、改行コードが \r\n になっていて変なものが環境変数にくっついてたりしないでしょうか。
改行コードが原因でした。
CRLF→LFに直したところ正常に動きました。感謝です。
回答1件
あなたの回答
tips
プレビュー