シェルスクリプトでカールを実行すると、カール:(6)ホストを解析できません:エラーが表示されます。

シェルスクリプトでカールを実行すると、カール:(6)ホストを解析できません:エラーが表示されます。

このコマンドを実行すると正常に動作します。

# curl  https://google.com

出力:

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.com/">here</A>.
</BODY></HTML>

しかし、シェルスクリプトの.shファイルで同じことを行うと、次のようになります。

#!/bin/bash

curl  https://google.com

出力:

curl: (6) Could not resolve host: google.com; Unknown error

出力grep curl /home/pmm/deploy-vsf/test_bot.sh | od -c

[root@host ~]# grep curl /home/pmm/deploy-vsf/test_bot.sh | od -c
0000000   c   u   r   l           h   t   t   p   s   :   /   /   g   o
0000020   o   g   l   e   .   c   o   m  \n
0000031

注:スクリプトは実行中ですが、ユーザーの家にsuいます。pmm

答え1

インタラクティブシェルエイリアスの使用curlこれは、特定のネットワークプロキシを使用するように指示するためです。

type curl
curl is aliased to `curl -x 192.168.188.170:3128'

スクリプトを実行するときにエイリアスは含まれていないため(主に対話型の使用のため)、欠落している部分を直接指定する必要があります。

#!/bin/bash
curl -x 192.168.188.170:3128 https://google.com

http_proxyより良い解決策は、エイリアスの代わりに環境変数を設定することですcurl。これはほとんどすべてのネットワークツールで機能します(ただし、ターゲットユーザーが定義しない限りsu機能しません)。sudo

export http_proxy=192.168.188.170:3128

関連情報