Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
卷曲';在单机运行和bash for循环中运行的行为不同_Bash_Ssl_Curl_Certificate - Fatal编程技术网

卷曲';在单机运行和bash for循环中运行的行为不同

卷曲';在单机运行和bash for循环中运行的行为不同,bash,ssl,curl,certificate,Bash,Ssl,Curl,Certificate,以下代码出错: for i in {190..208}; do curl -k -F 'act=upload' -F 'apk=@apks/apk_${i}.apk' -F 'comment=md5: `md5 apks/apk_$i.apk`' https://username:password@myhost.com/; done 服务器有一个自签名证书,因此,我尝试用-k关闭ssl 答复: 但是,如果我将命令更改为: for i in {190..208}; do echo "curl -

以下代码出错:

for i in {190..208}; do curl -k -F 'act=upload' -F 'apk=@apks/apk_${i}.apk' -F 'comment=md5: `md5 apks/apk_$i.apk`' https://username:password@myhost.com/; done
服务器有一个自签名证书,因此,我尝试用-k关闭ssl
答复:

但是,如果我将命令更改为:

for i in {190..208}; do echo "curl -k -F 'act=upload' -F 'apk=@apks/apk_${i}.apk' -F 'comment=md5: `md5 apks/apk_$i.apk`' https://username:password@myhost.com/" >> tmp.sh; done

bash tmp.sh
它在没有任何警告的情况下工作

我不知道为什么

多谢各位

附言。 一些信息

logan $ uname -a
Darwin Logans-MacBook.local 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386
logan $ /usr/bin/curl --version
curl 7.19.7 (universal-apple-darwin10.0) libcurl/7.19.7 OpenSSL/0.9.8l zlib/1.2.3
Protocols: tftp ftp telnet dict ldap http file https ftps 
Features: GSS-Negotiate IPv6 Largefile NTLM SSL libz 

我想您应该在命令中使用双引号(
)而不是单引号。如果您使用
,则变量
$I
不会展开,并且命令替换(
md5 apks/apk_$I.apk
)不会执行。

我想您应该使用双引号(
)而不是命令中的单引号。如果使用
则不会展开变量
$i
,也不会执行命令替换(
md5 apks/apk_$i.apk
)。

其他人提到使用“”而不是“”来正确展开${i}变量

然而,这不应该对curl的SSL检查产生影响。要回答关于“为什么bash与A和B的行为不同”的一般性问题,请尝试将所看到的输出与
set-x
进行比较。这准确地显示了在变量替换和报价处理之后shell正在执行的操作。举个简单的例子:

$ set -x
$ echo -k "My shell is ${SHELL}" 'and my homedir is ${HOME}'
+ echo -k 'My shell is /bin/bash' 'and my homedir is ${HOME}'
-k My shell is /bin/bash and my homedir is ${HOME}

如果将bash的输出与带“+”前缀的行进行比较,您应该发现shell是如何在命令行和tmp.sh中解释该行的。

其他人提到使用“”而不是“”来正确扩展${i}变量的

然而,这不应该对curl的SSL检查产生影响。要回答关于“为什么bash与A和B的行为不同”的一般性问题,请尝试将所看到的输出与
set-x
进行比较。这准确地显示了在变量替换和报价处理之后shell正在执行的操作。举个简单的例子:

$ set -x
$ echo -k "My shell is ${SHELL}" 'and my homedir is ${HOME}'
+ echo -k 'My shell is /bin/bash' 'and my homedir is ${HOME}'
-k My shell is /bin/bash and my homedir is ${HOME}

如果将bash的输出与带“+”前缀的行进行比较,您应该发现shell是如何在命令行和tmp.sh中解释该行的。

引用问题?通过在bash shebang之后放置“-x”来运行它,并比较输出,以验证所有内容都按预期进行了扩展。试着把“谢谢你@Fredrik,你为什么用评论来回答我,而不是创建一个答案?我甚至没有机会投票支持你的答案。这个问题回答得很好。它是关于引用问题。我需要关闭它还是做其他事情?引用问题?通过放置“-x”来运行它“在bash shebang之后,比较输出,以验证所有内容都按预期进行了扩展。试着换成“谢谢@Fredrik,为什么你要通过评论而不是创造答案来回答我?我甚至没有机会投票赞成你的答案。这个问题回答得很好。这是关于引用问题。我需要关闭它还是做其他事情?谢谢,
set-x
帮助很大。我在修改了引号后修复了它。我怎样才能反转
set-x
?@Logan,
set+x
set-x
相反,谢谢,
set-x
帮助很大。我在修改了引号后修复了它。我怎样才能反转
set-x
?@Logan,
set+x
set-x
相反,谢谢。就像你说的,谢谢。就像你说的。