web-dev-qa-db-fra.com

commande curl ne s'exécutant pas via un script shell sous bash

J'apprends à écrire des scripts Shell! pour la même chose, j'ai essayé de télécharger la page facebook en utilisant curl sur le terminal Ubuntu.

contenu t.sh

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

Obtenir une erreur lors de l'exécution du script en tant que

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

Mais si vous exécutez la commande directement, cela fonctionne bien.

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

J'apprécierai que quelqu'un me dise l'erreur que je fais dans le script.

J'ai vérifié que ssl est activé dans la bibliothèque curl.

5
Vivek Kumar

Une commande incorporée dans une parenthèse s'exécute en tant que sous-shell afin que vos variables d'environnement soient manquantes.

Essayez eval:

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

Créez votre script t.sh sur cette seule ligne:

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

Selon 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

Comme @Chepner l'a dit, allez lire BashFAQ # 50: j'essaie de mettre une commande dans une variable, mais les cas complexes échouent toujours! . Pour résumer, la façon dont vous devriez faire des choses comme celle-ci dépend de votre objectif.

  • Si vous n'avez pas besoin de stocker la commande, not! Il est difficile d’enregistrer les commandes, alors si vous n’avez pas besoin de le faire, ignorez-le et exécutez-le directement:

    curl "https://www.facebook.com/vivekkumar27june88" > ~/Desktop/fb.html
    
  • Si vous souhaitez masquer les détails de la commande, ou si vous allez l’utiliser beaucoup et ne pas vouloir l’écrire à chaque fois, utilisez une fonction:

    curlCmd() {
        curl "https://www.facebook.com/vivekkumar27june88"
    }
    
    curlCmd > ~/Desktop/fb.html
    
  • Si vous avez besoin de construire la commande pièce par pièce, utilisez un tableau au lieu d'une variable chaîne simple:

    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
    
  • Si vous souhaitez imprimer la commande, le meilleur moyen de le faire est généralement avec set -x:

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

    ... mais vous pouvez également faire quelque chose de similaire avec l'approche par tableaux si vous avez besoin de:

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

Installer les logiciels suivants dans Ubuntu 14.04

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

puis lancez le service Sudo Apache2 restart vérifiez que votre phpinfo () est activé avec curl "support cURL: enabled"

Puis vérifiez votre commande dans le script shell

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

echo $ RESULT

Vous obtiendrez une réponse;

Merci.

0
Vinay Joshi