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

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

新規登録して質問してみよう
ただいま回答率
85.48%
シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

Q&A

解決済

1回答

1144閲覧

curlコマンドでコマンドの出力結果をWebフックで送りたいがうまくいかない

kawausomaru

総合スコア29

シェルスクリプト

シェルスクリプトは、UNIX系のOSもしくはコマンドラインインタプリタ向けに記述されたスクリプト。bash/zshといったシェルによって実行されるため、このように呼ばれています。バッチ処理などに使用されており、テキストファイルに書かれた命令を順に実行します。

0グッド

0クリップ

投稿2022/12/22 01:56

編集2022/12/22 02:44

質問失礼します。

#!/bin/bash #ウェブフックURLを$WEBHOOKに格納 WEBHOOK="https://discord.com/api/webhooks/〇〇〇〇〇〇〇〇/〇〇〇〇〇〇〇〇" PASS=$(df /) curl \ -f \ -H "Content-Type: application/json" \ -d "{'content': `$PASS`}" \ $WEBHOOK

上記のシェルスクリプトでDiscodeにコマンドの出力結果を送りたいのですが

-bash: Filesystem: command not found curl: (22) The requested URL returned error: 400

こちらのエラーが出て出力されません。
考えられる原因などありましたら教えて頂けますと幸いです。

試したこと
・パスの中のコマンドを変更
・引用符を様々なパターンで確認
・パスの中のコマンドを絶対パスで書く
・ただの文章が送れるか確認(送れました)

#!/bin/bash #ウェブフックURLを$WEBHOOKに格納 WEBHOOK="https://discord.com/api/webhooks/〇〇〇〇〇〇〇〇/〇〇〇〇〇〇〇〇" PASS=$(df /) curl \ -f \ -H "Content-Type: application/json" \ -d "{'content': '$PASS'}" \ $WEBHOOK

$PASSの引用符をシングルクォーテーションに変更しました。
変更後のエラー

curl: (22) The requested URL returned error: 400

こちらの一行だけが出力されました。

#!/bin/bash #ウェブフックURLを$WEBHOOKに格納 WEBHOOK="https://discord.com/api/webhooks/〇〇〇〇〇〇〇〇/〇〇〇〇〇〇〇〇" PASS=$(df /) curl \ -f \ -H "Content-Type: application/json" \ -d "{'content': "$PASS"}" \ $WEBHOOK

↑シングルクォーテーション→ダブルクオテーションに変更しました。

curl: (6) Could not resolve host: 1K-blocks curl: (6) Could not resolve host: Used curl: (6) Could not resolve host: Available curl: (6) Could not resolve host: Use% curl: (6) Could not resolve host: Mounted curl: (6) Could not resolve host: on curl: (3) URL using bad/illegal format or missing URL

↑実行するとこのようなメッセージが出力されました。^Cを押さないとコマンド入力できない状態です。

#!/bin/bash #ウェブフックURLを$WEBHOOKに格納 WEBHOOK="https://discord.com/api/webhooks/〇〇〇〇〇〇〇〇/〇〇〇〇〇〇〇〇" PASS=$(df /) curl \ -f \ -H "Content-Type: application/json" \ -d "{'content': \"$PASS\"}" \ $WEBHOOK

↑内側のダブルクオテーションをエスケープしました。

curl: (22) The requested URL returned error: 400

↑こちらの行が出力されました。
curlコマンドがあるか調べたのですが/usr/bin/curlに収納されていました。

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

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

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

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

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

melian

2022/12/22 02:14

> -bash: Filesystem: command not found `$PASS` としているため(command substitution)、df / の出力文字列を実行しようとしてエラーになっています。
kawausomaru

2022/12/22 02:20

melianさんご回答頂きありがとうございます。 変更後、別のエラーが出てしまったので拝見して頂けると嬉しいです。
melian

2022/12/22 02:21

シングルクォーテーションですと、$PASS が展開されません($PASS という文字列のままです)。ダブルクォートであれば $PASS の内容が展開されます。
kawausomaru

2022/12/22 02:29

melianさんご回答頂きありがとうございます。 上記のようなエラーが出力されました。 ちなみに'content'の方も"content"に変更した所、同様のメッセージが出力された所存です。
melian

2022/12/22 02:35

ああ、外側に文字列があったのでしたね。それでは、 -d "{'content': "$PASS"}" を、 -d "{'content': \"$PASS\"}" に変更してみて下さい。(内側のダブルクォートをエスケープします)
melian

2022/12/22 02:49

> The requested URL returned error: 400 この HTTP response 400 というのは Bad Request、つまり、サーバーがそのリクエストを処理できないことを意味しています。リクエストの構文(送信した JSON 文字列の中身)が不適切である可能性があります。
kawausomaru

2022/12/22 03:06

melianさんご回答頂きありがとうございます。 JSON文字列の中身が不適切が原因だった事が分かり無事解決しました。 本当にありがとうございます。
guest

回答1

0

ベストアンサー

変更後、別のエラーが出てしまったので
-d "{'content': '$PASS'}" \

という変更でしょうか?

正しいJSONの文字列は'でなく"で囲むので、その部分でエラーになっているのでは?
-d "{'content': 'test'}" \でいけますか?これが通れば'も許容されていると言うことですが。

あと、正しいJSONであるためには、改行も\nに変更する必要があります。

sh

1 PASS=$(df / | sed -z 's/\n/\\n/g') 2 curl \ 3 -f \ 4 -H "Content-Type: application/json" \ 5 -d '{"content": "'"$PASS"'"}' \ 6 $WEBHOOK

投稿2022/12/22 02:42

otn

総合スコア84555

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

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

otn

2022/12/22 02:50

gnu sedじゃないと -z が無いかも知れないので、その場合は、 sed 's/$/\\n/' | tr -d '\n' でしょうか。
kawausomaru

2022/12/22 03:08

上記コードにより無事解決することができました。 json形式について知見がなかったので非常に助かりました。 勉強します。
otn

2022/12/22 03:32 編集

> json形式について知見がなかった 自分が知見が無いことを意識していれば(無知の知)、結果が期待通りでないときに、 「その部分が合っているのかを確認する」という方向に思考が行くのですが、 自分が何を知っていて何を知らないのかを把握していないと問題解決は進まないですね。 私もうろ覚えの物は一旦は想像で進めて、期待通りでないときは、ちゃんと調べます(間違っても致命的でない場合)。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問