web-dev-qa-db-ja.com

curlコマンドがbashのシェルスクリプトを介して実行されない

シェルスクリプトを学習しています。同じために、私はubuntu端末でcurlを使用してfacebookページをダウンロードしてみました。

t.shコンテンツ

vi@vi-Dell-7537(Desktop) $ cat t.sh 
curlCmd="curl \"https://www.facebook.com/vivekkumar27june88\""
echo $curlCmd
($curlCmd) > ~/Desktop/fb.html

スクリプトを次のように実行するとエラーが発生する

vi@vi-Dell-7537(Desktop) $ ./t.sh 
curl "https://www.facebook.com/vivekkumar27june88"
curl: (1) Protocol "https not supported or disabled in libcurl

しかし、コマンドを直接実行すると、正常に動作します。

vi@vi-Dell-7537(Desktop) $ curl "https://www.facebook.com/vivekkumar27june88"
<!DOCTYPE html>
<html lang="hi" id="facebook" class="no_js">
<head><meta chars.....

脚本で私がしている間違いを誰かに知らせていただければ幸いです。

Curlライブラリでsslが有効になっていることを確認しました。

5
Vivek Kumar

かっこ内に埋め込まれたコマンドはサブシェルとして実行されるため、環境変数は失われます。

Evalを試してください:

curlCmd="curl 'https://www.facebook.com/vivekkumar27june88' > ~/Desktop/fb.html"
eval $curlCmd
14
Abhishek

スクリプトを作成するt.shこの1行のみとして:

curl -k "https://www.facebook.com/vivekkumar27june88" -o ~/Desktop/fb.html

man curl

-k, --insecure

(SSL) This option explicitly allows curl to perform "insecure" SSL connections transfers.  
All  SSL  connections  are  attempted  to be made secure by using the CA certificate bundle
installed by default. This makes all connections considered "insecure" fail unless -k,
--insecure is used.

-o file

Store output in the given filename.
3
anubhava

@Chepnerが言ったように、読んでください BashFAQ#50:コマンドを変数に入れようとしていますが、複雑なケースは常に失敗します! 。要約すると、このようなことをどのように行うべきかは、目標が何であるかによって異なります。

  • コマンドを保存する必要がない場合は、しないでください!コマンドを保存するのは難しいので、必要がなければ、その混乱をスキップして直接実行してください。

    curl "https://www.facebook.com/vivekkumar27june88" > ~/Desktop/fb.html
    
  • コマンドの詳細を非表示にしたい場合、またはコマンドを頻繁に使用し、毎回書きたくない場合は、関数を使用します。

    curlCmd() {
        curl "https://www.facebook.com/vivekkumar27june88"
    }
    
    curlCmd > ~/Desktop/fb.html
    
  • コマンドを1つずつ作成する必要がある場合は、プレーンな文字列変数の代わりに配列を使用します。

    curlCmd=(curl "https://www.facebook.com/vivekkumar27june88")
    for header in "${extraHeaders[@]}"; do
        curlCmd+=(-H "$header")   # Add header options to the command
    done
    if [[ "$useSilentMode" = true ]]; then
        curlCmd+=(-s)
    fi
    
    "${curlCmd[@]}" > ~/Desktop/fb.html    # This is the standard idiom to expand an array
    
  • コマンドを印刷する場合、通常はset -xを使用するのが最善の方法です。

    set -x curl " https://www.facebook.com/vivekkumar27june88 ">〜/ Desktop/fb.html set + x

    ...しかし、必要に応じて、配列アプローチを使用して同様のことを行うこともできます。

    printf "%q " "${curlCmd[@]}"    # Print the array, quoting as needed
    printf "\n"
    "${curlCmd[@]}" > ~/Desktop/fb.html
    
1
Gordon Davisson

次のソフトウェアをubuntu 14.04にインストールします

  1. Sudo apt-get install php5-curl
  2. Sudo apt-get install curl

次に、Sudoサービスを実行します。Apache2の再起動を確認し、phpinfo()がcurl "cURL support:enabled"で有効になっていることを確認します。

次に、シェルスクリプトでコマンドを確認します

結果= curl -L "http://sitename.com/dashboard/?show=api&action=queue_proc&key=$JOBID" 2>/dev/null

エコー$ RESULT

応答が得られます。

ありがとうございます。

0
Vinay Joshi