curl 命令未通过 bash 中的 shell 脚本执行

curl command not executing via shell script in bash

我正在学习 shell 脚本编写!同样,我尝试在 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。

创建您的脚本 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.

嵌入在 括号 中的命令作为 sub-shell 运行,因此您的环境变量将丢失。

尝试评估:

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

正如@Chepner 所说,去阅读 BashFAQ #50: I'm trying to put a command in a variable, but the complex cases always fail!。总而言之,你应该如何做这样的事情取决于你的目标是什么。

  • 如果不需要存储命令,不要!存储命令是很难搞定的,如果不需要,直接跳过那些乱七八糟的,直接执行:

    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:

    设置-x 卷曲“https://www.facebook.com/vivekkumar27june88” > ~/Desktop/fb.html 设置 +x

    ...但如果需要,您也可以使用数组方法执行类似的操作:

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

在ubuntu 14.04

中安装以下软件
  1. sudo apt-get 安装 php5-curl
  2. sudo apt-get 安装 curl

然后运行 sudo service apache2 restart 检查你的 phpinfo() 是否启用了 curl "cURL support: enabled"

然后在shell脚本

中检查你的命令

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

回显 $RESULT

您会收到回复;

谢谢。