curl ignore --data は @ 記号で始まります: ファイルから読み取らない

curl ignore --data は @ 記号で始まります: ファイルから読み取らない

スラック次のように Slackbot にスクリプトを記述して、チャンネルにメッセージを投稿することができます。

curl --data "$msg" $'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random'

ここで、メッセージの最初の部分としてユーザー名を記載したいと思いますmsg="@joernhees hello self"

これに関する問題は、--datacurl の引数が符号で始まる場合、@その後の文字列をファイル名として解釈し、その内容を投稿することです。curl に符号を無視させ、リテラルを投稿要求の最初の文字として送信させる@方法はありますか?@@

答え1

実は、これができることを今知りました (ただし、これが最善の選択肢かどうかはわかりません)。

curl --data '@-' $'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random' <<< "$msg"

コツは、curl に stdin から読み取るように指示し@-、それを介してメッセージを渡すことです。

答え2

これは古い質問だとは思いますが、私も同じ問題を抱えており、--data-raw通常の状況では(https://curl.se/docs/manpage.html#--data-raw)または--form-stringマルチパートデータ(https://curl.se/docs/manpage.html#--フォーム文字列したがって、ここではおそらく以下を使用します。

curl --data-raw "$msg" 'https://<yourteam>.slack.com/services/hooks/slackbot?token=<yourtoken>&channel=#random'

関連情報