質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

1回答

242閲覧

シェルスクリプトでcurlコマンドを実行するさい、URLに環境変数を指定する方法

outso1990

総合スコア26

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2024/10/25 11:02

編集2024/10/28 01:16

実現したいこと

シェルスクリプトのファイル内に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上で同様の事例がなく、解決に至らなかった。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

melian

2024/10/25 11:20 編集

> CURL_URL=https://www.test.com この場合、CURL_URL はシェル変数として定義されます。環境変数として定義する場合は export を付けます。 export CURL_URL='https://www.test.com' printenv CURL_URL # 確認
pogin503

2024/10/26 06:59

書き方を見るに環境変数になっていないように見えます。bashで実行している場合、下記のようにexportをつけて実行すると環境変数になります。 ``` export CURL_URL=https://www.test.com ``` 上記を実行してシェルスクリプトを試すとどうなりますか。 (環境変数について) シェル変数と環境変数の違いをコマンドラインで確認する https://qiita.com/kure/items/f76d8242b97280a247a1
outso1990

2024/10/28 01:12 編集

コメントありがとうございます。 試してみましたが結果は同じでした。 質問内容を編集してあります。
melian

2024/10/28 01:46

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
outso1990

2024/10/28 02:05

以下の結果になりました。 curl: no URL specified! curl: try 'curl --help' or 'curl --manual' for more information
bsdfan

2024/10/28 02:31 編集

env.sh の文字コードがおかしかったり、改行コードが \r\n になっていて変なものが環境変数にくっついてたりしないでしょうか。
outso1990

2024/10/28 04:01

改行コードが原因でした。 CRLF→LFに直したところ正常に動きました。感謝です。
guest

回答1

0

自己解決

env.shの改行コードがCRLFになっていたのでLFに修正したところ、期待通り動作。

投稿2024/10/28 04:01

outso1990

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問