Вот фрагмент:
var=`ls | shuf | head -2 | xargs cat | sed -e 's/\(.\)/\1\n/g' | shuf | tr -d '\n'`
Это выберет два случайных файла из текущего каталога, объединит их содержимое, перетасует их и присвоит результат var. Это работает отлично в большинстве случаев, но примерно раз в тысячах случаев, вместо этого только вывод ls
привязан к var (это не только выход, см. EDIT II). Что может быть объяснением?
Некоторые потенциально важные факты:
- каталог содержит не менее двух файлов
- есть только текстовые файлы в каталоге
- имена файлов не содержат пробелов
- файлы длиной от 5 до 1000 символов
- фрагмент является частью более крупного script, который параллельно запускал два экземпляра
- bash версия:
GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)
- uname:
Linux 2.6.35-28-generic-pae #50-Ubuntu
РЕДАКТИРОВАТЬ: Я запускал фрагмент сам по себе несколько тысяч раз без ошибок. Затем я попытался запустить его с помощью других частей всего script. Здесь конфигурация, которая создает ошибки:
cd dir_with_text_files
var=`ls | shuf | head -2 | xargs cat | sed -e 's/\(.\)/\1\n/g' | shuf | tr -d '\n'`
cd ..
Существует несколько сотен строк script между cd
s, но это минимальная конфигурация для воспроизведения ошибки. Обратите внимание, что аномальный вывод привязывает к var выход текущего каталога, а не dir_with_text_files
.
EDIT II: Я смотрел результаты более подробно. Вывод ls
не отображается отдельно, он вместе с двумя перетасованными файлами (между их содержимым или после или перед ними неповрежденными). Но все становится лучше; позвольте мне создать сцену, чтобы поговорить о конкретных каталогах.
[~/projects/upload] ls -1
checked // dir
lines // dir, the files to shuffle are here
pages // also dir
proxycheck
singlepost
uploader
indexrefresh
t
tester
До сих пор я видел вывод ls
от upload
, но теперь я увидел результат ls */*
(также пробежал от upload
). Он был в форме "someMangledText ls
moreMangledText ls */*
finalBatchOfText". Возможно ли, что последовательность ls
, которая, несомненно, была сгенерирована, каким-то образом выполнена?