Причина, по которой оно не срабатывает с этой ошибкой, - это интерполяция $ (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}"
Доступ к файлам осуществляется последовательно.
Что вы можете сделать, так это прочитать весь файл в массив и выбрать из него случайную запись.