Я наблюдаю очень странное поведение в моем скрипте KSH и не могу понять причину этого.Я надеюсь, что у кого-то может быть объяснение этому!
Поток сценариев:
Цикл по файлам в каталоге для создания пакетных файлов для обработки входных файлов в пакетах.Пример: входные файлы
sample_abc_20180910.txt
sample_abc_20180911.txt
sample_def_20180910.txt
sample_def_20180911.txt;
Скрипт зацикливает файлы, используя следующую команду:
for f in `find $dataindir -maxdepth 1 -type f -name "sample_*.txt" | sort -n`
это для цикла работает, как и ожидалось - он берет один файлодновременно с циклом for.
Процесс проверяет, что в двух файлах есть «abc», а в двух других - «def».
Процесс создает файл project_1.batch, содержащий именадва файла в двух отдельных строках.
$cat project_1.batch
$sample_abc_20180910.txt
$sample_abc_20180911.txt
Аналогично, процесс создает пакет project_2.bat, содержащий имена двух других файлов в двух отдельных строках.
Далее я зацикливаюсь на двух .batch файлах, и он работает как положено.Цикл for выбирает по одному .batch-файлу за раз и продолжает ...
for bf in `find $dataindir -maxdepth 1 -type f -name "*.batch" | sort -n`
do
echo $bf
#intermediate process
done
Однако я повторяю файлы .batch второй раз в отдельном цикле for, используята же команда (но с использованием другой переменной for) и на этот раз результаты странные!Цикл for забирает оба файла .batch за один раз!
for ef in `find $dataindir -maxdepth 1 -type f -name "*.batch" | sort -n`
do
echo $ef
#intermediate process
done
$/home/userdir/project/project_2.batch
$/home/userdir/project/project_1.batch
Впоследствии, когда я пытаюсь запустить cat на $ ef внутри цикла for, я получаю сообщение об ошибке
cat: /home/userdir/project/project_2.batch
/home/userdir/project/project_1.batch: No such file or directory
^^^^ Обратите внимание, что между двумя именами файлов включен символ новой строки.
Почему цикл for с командой find работает один раз, а другой - нет?В конце концов мне нужно использовать следующее, чтобы скрипт работал, но почему команда find не работает так же, как в прошлый раз?!
for file in $dataindir/project_*.batch