Случайное чтение из файла (Perl)

Причина, по которой оно не срабатывает с этой ошибкой, - это интерполяция $ (seq 1 $ k) внутри вашей команды fanout .

Позвольте мне объяснить ...

Выполнение seq 1 2 возвращает следующее:

1
2

У вас есть это в двойных кавычках, поэтому новая строка сохраняется как значимый текст. Таким образом, команда fanout вычисляется следующим образом:

fanout server1  'umask 022 ; for k in 1
2 ; do for i in ear2 ; do echo /appl/as/bin/md5 /appl/as/var/spool/ears/abc/ ; done ; done'

Ваш ksh не понимает 2 во второй строке, поэтому он отключается.

Вы можете исправить это, включив xargs , но затем вы столкнетесь со второй потенциальной проблемой, когда вы используете k в качестве счетчика циклов, но $ k вычисляется перед запуском цикла. Кроме того, у вас есть подоболочка, в которой $ Ear необходимо оценить перед запуском скрипта, но она используется в цикле, который изменяется во время выполнения.

Я нашел страницу руководства для разветвления , но я не понимаю, почему вы запускаете цикл на одной системе ( server1 ) когда существует fanout для запуска команды в нескольких системах. Если вы можете объяснить разницу между сервером и ухом , я мог бы предложить более чистый фрагмент кода. Однако мое первое предложение могло бы быть таким:

ears='ear1,ear2'
cluster=abc
dmgr=server1

fanout "$dmgr" "/appl/as/bin/md5 /appl/as/var/spool/ears/${cluster}/{$ears}"

0
20.09.2018, 09:04
1 ответ

Доступ к файлам осуществляется последовательно.

Что вы можете сделать, так это прочитать весь файл в массив и выбрать из него случайную запись.

1
28.01.2020, 02:42

Теги

Похожие вопросы