поведение curl отличается между работой в одиночку и в цикле bash for - PullRequest
1 голос
/ 25 мая 2011

Следующий код приводит к ошибке:

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

На сервере есть самоподписанный сертификат, поэтому я попытался отключить ssl с -k.reponse:

curl: (26) SSL: unable to obtain common name from peer certificate
curl: (26) SSL: unable to obtain common name from peer certificate
curl: (26) SSL: unable to obtain common name from peer certificate
......
curl: (26) SSL: unable to obtain common name from peer certificate

Но если я изменю свою команду на:

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

Она работает без предупреждения.

Понятия не имею, почему.

Спасибо.

PS Немного информации.

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 

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Другие упоминали использование "" вместо "для правильного расширения переменной $ {i}.

Однако это не должно влиять на проверку SSL в curl.Чтобы ответить на ваш общий вопрос о том, «почему bash ведет себя по-разному с A и B», попробуйте сравнить вывод, полученный с set -x.Это показывает, что именно выполняется оболочкой, после подстановки переменных и обработки кавычек.Краткий пример:

$ 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 со строками с префиксом «+», вы должны заметить, как оболочка интерпретирует строку в командной строке и в tmp.sh.

0 голосов
/ 25 мая 2011

Полагаю, вам следует использовать двойные кавычки (") вместо одинарных кавычек в вашей команде.Если вы используете ', то переменная $i не раскрывается, а подстановка команд (md5 apks/apk_$i.apk) не выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...