Просто удалите оператор управления &
, который заставляет ваши команды выполняться в фоновом режиме и асинхронно из вашего собственного потока управления сценарием.
Это приведет к тому, что ваша функция save_log()
будет вызываться без аргументов (потому что они находятся в фоновом режиме и, вероятно, даже не завершили, когда вы вызвали save_log()
).
Я протестировал, и это работает (я не знал, какие URL у вас были в вашем FILE_NAME, поэтому я просто добавил несколько случайных URL):
SECRET_KEY='lolz'
FILE_NAME="test.txt"
function save_log()
{
printf '%s\n' \
"Header Code : $1" \
"Executed at : $(date)" \
"Response Body : $2" \
"====================================================================================================="$'\r\n\n' >> output.log
}
# while IFS= read -r line; do
while IFS= read -r line || [[ -n "$line" ]];
do
HTTP_RESPONSE=$(curl -L -w "HTTPSTATUS:%{http_code}" -H "X-Gitlab-Event: Push Hook" -H 'X-Gitlab-Token: '$SECRET_KEY --insecure $line 2>&1)
HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g')
HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
echo $HTTP_RESPONSE
save_log "$HTTP_STATUS" "$HTTP_BODY"
done < $FILE_NAME
Выход:
Header Code : 200
Executed at : Sun Jun 30 18:05:12 UTC 2019
Response Body : <!DOCTYPE html> (...)