IFS bash отличается по терминальному и cron исполнению - PullRequest
0 голосов
/ 30 января 2019

У меня есть файл sortedurls.txt, который является результатом построчного переноса домена на URL.sortedurls.txt выглядит следующим образом

https://example.com/page1.php
https://example.com/page2.php
https://example.com/page-more.php

Циклически перебирая sortedurls.txt (url by url) и собирая теги img со страниц с помощью wget и hxselect.Просто для проверки сохранения в файл testtagstring.txt.В таком случае это выглядит так:

<img alt="…" src="/assets/…/image1.jpg">§<img alt="…" src="/assets/…/image11.jpg">
<img alt="…" src="/assets/…/image2.jpg">§

и т. Д.

Разделение каждой строки разделителя § в массив 'tags'.Подсчитайте элементы массива и добавьте результат в файл для проверки.

Проблема: Выполнение в терминале работает правильно, и вывод показывает правильное количество записей (6, 1, 1, 9…).Выполняя cronjob, IFS удваивает сумму до 12, 2, 2, 18….

Любая идея, почему это меняет свое поведение, просто используя cron?

#!/bin/bash

# Set this script dir path
scriptdirpath=/usr/local/www/apache24/data/mydomain.com/testdir

# Some config variables
useragent=googlebot
searchtag=img
delimiter=§

# Change to pwd
cd $scriptdirpath


# Make files
echo > testtagstring.txt
echo > testimages.txt

# Loop through the sortedurls.txt
while read p; do

tagString=$(wget -qO - --user-agent="$useragent" $p | hxnormalize -x | hxselect -s "$delimiter" $searchtag )

echo $tagString >> testtagstring.txt

IFS="$delimiter" read -r -a tags <<<"$tagString"

echo "Amount of img tags: ${#tags[@]}" >> $scriptdirpath/testimages.txt

done < $scriptdirpath/sortedurls.txt

1 Ответ

0 голосов
/ 30 января 2019

Мои сценарии отформатированы в UTF-8, и поэтому они не действительно действительны для cron, который был настроен для использования ASCII.Добавление следующего в мой скрипт bash решает проблему без каких-либо изменений в конфигурации cron.

LC_ALL_SAVED="$LC_ALL"
export LC_ALL=de_DE.UTF-8

Теперь все работает нормально из CLI и из cron.Спасибо за помощь.

...