このコマンドを実行すると正常に動作します。
# 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