我正在使用curl 7.54.1(x86_64-apple-darwin15.6.0)从bash脚本中的soundcloud API下载曲目
代码看起来像这样 -
# -vsLOJ = --verbose --silent --location --remote-name --remote-header-name
# redirect stderr to stdout to capture the headers
curl_output=$(curl -vsLOJ $track_download_url?client_id=$client_id 2>&1);
这应该是:
stdout
)发生了什么:
下载没问题,它使用“Content-Disposition”中的正确名称将文件保存到工作目录,但 $curl_output
充满了看起来像是{的混合的垃圾数据{1}}工作目录和部分详细数据。
示例输出cURL-ing ls
在带有文件的测试目录中:
https://www.google.com
fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png重建网址: https://www.google.com/ fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png尝试172.217.10.100 ... fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png TCP_NODELAY设置fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png连接到www.google.com(172.217.10.100) 端口443(#0)fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png 使用TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256进行TLS 1.2连接 fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png服务器 证书:www.google.com fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png服务器证书:Google Internet Authority G2 fakefile.1 fakefile.2 hello.txt song.mp3 vacation.png服务器 证书:GeoTrust Gl<设置Cookie: 绝密=绝密############################################### ######################### 100.0%*连接#0以托管www.google.com完好无损
完全让我困惑。我已经在bash脚本和终端中测试了这个。它只是在我将结果存储在变量中时才会发生,运行该cURL(包括stderr重定向)而不将其存储在$ curl_output中将正确写入
而且,对于我用
测试的任何网址都会发生这种情况我的.curlrc:
curl_output=$(curl --verbose -o /dev/null "https://www.google.com" 2>&1)
echo $curl_output
答案 0 :(得分:0)
在$curl_output
变量周围加上引号,因为它包含*
的解释。
% echo "$curl_output"
* Rebuilt URL to: https://www.google.com/
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 2a00:1450:4009:806::2004...
* Connected to www.google.com (2a00:1450:4009:806::2004) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
鉴于:
echo $curl_output
会将*
解析为当前目录中的任何文件名。