it-swarm.com.de

der Befehl curl wird in Shell nicht über ein Shell-Skript ausgeführt

Ich lerne Shell-Scripting! für das gleiche habe ich versucht, die Facebook-Seite mit curl auf Ubuntu-Terminal herunterzuladen.

t.sh Inhalt

[email protected](Desktop) $ cat t.sh 
curlCmd="curl \"https://www.facebook.com/vivekkumar27june88\""
echo $curlCmd
($curlCmd) > ~/Desktop/fb.html

Fehler beim Ausführen des Skripts als

[email protected](Desktop) $ ./t.sh 
curl "https://www.facebook.com/vivekkumar27june88"
curl: (1) Protocol "https not supported or disabled in libcurl

Wenn der Befehl jedoch direkt ausgeführt wird, funktioniert er einwandfrei.

[email protected](Desktop) $ curl "https://www.facebook.com/vivekkumar27june88"
<!DOCTYPE html>
<html lang="hi" id="facebook" class="no_js">
<head><meta chars.....

Ich würde es zu schätzen wissen, wenn mich jemand über den Fehler informiert, den ich im Skript gemacht habe.

Ich habe bestätigt, dass die Curl-Bibliothek die SSL-Funktion aktiviert hat.

5
Vivek Kumar

Ein Befehl, der in einer Klammer eingebettet ist, wird als Sub-Shell ausgeführt, sodass Ihre Umgebungsvariablen fehlen.

Versuch eval:

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

Erstellen Sie Ihr Skript t.sh nur als einzelne Zeile:

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

Gemäß 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 hat gesagt, gehe lesen BashFAQ # 50: Ich versuche, einen Befehl in eine Variable zu setzen, aber die komplexen Fälle scheitern immer! . Zusammenfassend lässt sich sagen, wie Sie dies tun sollten, hängt von Ihrem Ziel ab.

  • Wenn Sie den Befehl nicht speichern müssen, Don't! Das Speichern von Befehlen ist schwer zu bekommen. Wenn Sie dies nicht brauchen, überspringen Sie einfach dieses Chaos und führen es direkt aus:

    curl "https://www.facebook.com/vivekkumar27june88" > ~/Desktop/fb.html
    
  • Wenn Sie die Details des Befehls ausblenden möchten oder häufig verwenden und nicht jedes Mal ausschreiben möchten, verwenden Sie eine Funktion:

    curlCmd() {
        curl "https://www.facebook.com/vivekkumar27june88"
    }
    
    curlCmd > ~/Desktop/fb.html
    
  • Wenn Sie den Befehl Stück für Stück erstellen müssen, verwenden Sie ein Array anstelle einer einfachen Stringvariablen:

    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
    
  • Wenn Sie den Befehl drucken möchten, verwenden Sie am besten set -x:

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

    ... Sie können jedoch auch etwas Ähnliches mit dem Array-Ansatz machen, wenn Sie Folgendes benötigen:

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

Installieren Sie folgende Software in Ubuntu 14.04

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

führen Sie dann den Sudo-Dienst Apache2-Neustart

Überprüfen Sie dann Ihren Befehl im Shell-Skript

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

echo $ RESULT

Sie erhalten eine Antwort.

Danke.

0
Vinay Joshi