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
中安装以下软件
- sudo apt-get 安装 php5-curl
- 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
您会收到回复;
谢谢。
我正在学习 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
中安装以下软件- sudo apt-get 安装 php5-curl
- 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
您会收到回复;
谢谢。