У меня есть этот раздел команды curl внутри моего скрипта оболочки, который вызвал ошибку 500 repsonse от сервера. Однако этот код работает, когда я вручную запускаю команду.
curl -qgsSkH "Content-Type: multipart/form-data" --no-progress-bar --header "Token: $authKey" -F "filename=@$compressedFileName" -F "options={\"application\":\"2\",\"timeout\":\"5000\"}" https://www.domain.com > results.txt
Есть ли у кого-нибудь идеи почему?
Редактировать: Я провел ручную отладку и обнаружил, что проблема вызвана переменной $authKey. Эта переменная извлекается следующим кодом в моем скрипте.
# Get authentication key from FireEye AX response
while read line
do
if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
then
authKey="${BASH_REMATCH[1]}"
fi
done <auth.txt
Если я переопределю эту переменную, используя что-то вроде следующего, то скрипт будет работать.
authKey="TheAuthenticationKey"
Но почему это происходит? Предыдущая часть, где я передаю строку из файла, когда читаю его построчно, уже передает правильное значение (я дважды проверил, выведя вывод в txt-файл).
Редактировать Мне удалось углубиться еще немного. Когда я пытаюсь вывести значение токена в файл и добавляю " в начало и конец строки, я получаю такой результат.
"X-FeApi-Token: IDR+jxU1kB5ZpXsRNAgqfjTxkjZ0L2atH+l0H/NeatWDAJs=
"
Я не уверен, как удалить эту новую строку. Кто-нибудь может подсказать?
решение1
Проблема, по-видимому, вызвана новой строкой или возвратом каретки и новой строкой в $authKey, как указано в "FireEye AX"
Вы можете удалить возврат каретки и перевод строки, пропустив его через конвейерtr -d '\r\n'
например
# Get authentication key from FireEye AX response
while read line
do
if [[ $line =~ ^SOME-PATTERN:[[:space:]](.*) ]]
then
authKey="${BASH_REMATCH[1]}"
authKey=$(printf "%s" "$authKey" | tr -d '\r\n')
fi
done <auth.txt
Я не помню, будет ли $BASH_REMATCH передан в подоболочку... вы можете попробовать вместо этого сделать это в одной строке, возможно, это сработает:
authKey=$(printf "%s" "${BASH_REMATCH[1]}" | tr -d '\r\n')
решение2
Я предполагаю, что предоставленный вам файл данных имеет окончания строк в стиле Windows (CR/LF), а не окончания строк в стиле Unix/Linux (LF).
Это альтернативное сопоставление шаблона исключит любые возможные конечные CR:
[[ $line =~ ^SOME-PATTERN:[[:space:]](([^\015]*) ]]
authKey="${BASH_REMATCH[1]}"