У меня есть простой сценарий bash:
#!/bin/bash
wget -q 'http://requestb.in/1fq0r3s1?foo=a%2Bb' -O /dev/null
Если я запустил это из командной строки, а затем проверю на http://requestb.in/1fq0r3s1?inspect я вижу
Строка запроса
фу: а + б
Чего я и ожидал.
Однако когда скрипт bash запускается CRON, я вижу
Строка запроса
фу: а б
Похоже, что-то декодировало URL-адрес перед отправкой, преобразовав %2B
в +
который затем интерпретируется принимающим сервером как пробел.
Может ли кто-нибудь объяснить это и помочь мне понять, как заставить скрипт вести себя в cron, как при запуске из командной строки?
(Заметка: curl
не страдает таким же поведением, но мне интересно узнать, почему wget
ведет себя так)
% (процент) означает новую строку в cron!
Так что вы либо должны убежать от этого вот так foo=a\%2Bb
или поместите свою команду в файл bash и запустите этот файл в crontab.