it-roy-ru.com

команда curl не выполняется через скрипт Shell в bash

Я изучаю сценарии Shell! для того же самого я попытался загрузить страницу facebook, используя curl на терминале Ubuntu.

содержание t.sh

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

Получение ошибки при запуске скрипта как

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

Но если запустить команду напрямую, то она работает нормально.

[email protected](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

Команда, встроенная в круглые скобки запускается как sub-Shell , поэтому ваши переменные среды будут отсутствовать.

Попробуйте Eval:

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

Создайте свой скрипт t.sh только в одной строке:

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: я пытаюсь поместить команду в переменную, но сложные случаи всегда терпят неудачу! . Подводя итог, то, как вы должны делать подобные вещи, зависит от вашей цели.

  • Если вам не нужно сохранять команду, not! Запоминать команды сложно, поэтому, если вам это не нужно, просто пропустите этот беспорядок и выполните его напрямую:

    curl "https://www.facebook.com/vivekkumar27june88" > ~/Desktop/fb.html
    
  • Если вы хотите скрыть детали команды или собираетесь часто ее использовать и не хотите записывать ее каждый раз, используйте функцию:

    curlCmd() {
        curl "https://www.facebook.com/vivekkumar27june88"
    }
    
    curlCmd > ~/Desktop/fb.html
    
  • Если вам нужно собрать команду по частям, используйте массив вместо простой строковой переменной:

    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 установить php5-curl
  2. Sudo apt-get установить curl

затем запустите службу Sudo Apache2 restart проверьте, что phpinfo () включен с помощью curl "cURL support: enabled"

Затем проверьте вашу команду в сценарии оболочки

РЕЗУЛЬТАТ = curl -L "http://sitename.com/dashboard/?show=api&action=queue_proc&key=$JOBID" 2>/dev/null

echo $ RESULT

Вы получите ответ;

Спасибо вам.

0
Vinay Joshi