Пускач команд является простейшим способом автоматизации в терминале, но он не позволяет выполнять заранее заготовленные последовательности команд из одного пускача.

Если пользователь имеет последовательность команд, которые представляют собой шаги некоторой процедуры, и выполнение очередного шага зависит от результата выполнения предыдущего шага то эту последовательность команд лучше всего использовать как набор пускачей и команд, при этом пользователь может решать сам, какой пускач команд выполнять следующим в зависимости от результата предыдущей команды. Другими словами, если последовательность выполнения команд может изменяться в зависимости от результов отдельных команд, то пользователь может сам управлять выполнением последовательности команд, если он сохраняет эти команды на дереве пускачей в виде последовательности пускачей команд. Это не требует знаний программирования, поскольку в этом случае пользователь сам отвечает за правильный порядок выполнения команд в процессе выполнения процедуры. Если пользователь умеет программировать, то он может написать плагину, которая будет посылать команду, анализировать результат ее выполнения и выбирать, какую следующую команду послать в зависимости от результата выполнения предыдущей команды. Таким образом, плагина позволяет автоматически управлять выбором последовательности команд, но при этом пользователь должен сам программировать правила выбора следующей команды.

Если последовательность команд, которые нужно выполнить не изменяется в зависимости от результата каждой отдельной команды, то можно использовать SCRIPT или I-SCRIPT пускачи для выполнения таких последовательностей команд.

Для работы SCRIPT или I-SCRIPT пользователь должен создать текстовый файл, содержащий цепочку команд, которые нужно выполнять, по одной команде на строку, и каждая строка должна завершаться символом перехода на новую строку. Путь к этому файлу указывается внутри пускача. При выполнении пускача SCRIPT программа открывает текстовый файл с командами и посылает каждую команду в терминал также, как и при выполнении пускача команд. При выполнении пускача команд пользователь должен сам ждать пока оборудование завершит обработку текущей команды и выдаст подсказку, которая указывает на то, что оборудование готово принимать следующую команду. Только после этого пользователь может выполнять следующий пускач команд. Таким образом, при ручном выполнении цепочки из пускачей команд пользователь сам отслеживает необходимую паузу перед выполнением (отправкой) следующей команды. При выполнении цепочки команд из файла, который вызывается через пускач SCRIPT, программа сама должна обнаруживать ситуацию, когда можно посылать следующую команду. Пускачи SCRIPT и I-SCRIPT используют разные алгоритмы для того, чтобы решить, когда можно посылать следующую команду. Пускач SCRIPT использует более простой алгоритм, который состоит в следующем.

После посылки очередной команды программа следит за тем, приходят ли результаты выполнения команды (поток байтов текста) из удаленного оборудования на терминал. Пока этот поток байтов текста продолжается, программа ждет и не посылает следующую команду, считая, что предыдущая команда еще выполняется и распечатывает результаты своего выполнения. Как только поток байтов, приходящих с удаленного оборудования, останавливается на некоторое существенное время, программа считает, что эта остановка произошла потому, что удаленное оборудование выдало подсказку, указывающую на готовность выполнения следующей команды, и прекратило печатать на экран. В этот момент программа посылает следующую команду из файла скрипта. В зависимости от быстродействия оборудования и сложности (трудоемкости) выполняемых команд распечатка результатов команд может содержать паузы различной длительности, не связанные с ситуацией, когда оборудование закончило выполнение предыдущей команды, выдало подсказку и ожидает следующую команду. Задача пользователя вручную выполнить последовательность команд и на основании опыта выполнения этой последовательности команд определить величину максимальной паузы, которая не связана с ожиданием следующей команды в режиме подсказки. В большинстве случаев паузы в процессе выполнения команд не превышают долей секунды. При создании пускача SCRIPT пользователь должен задать значение паузы, большее, чем максимальное значение паузы в процессе выполнения любой из команд, содержащихся в файле скрипта. Если заданное пользователем значение паузы обнаружено в потоке байтов, приходящих в результате выполнения предыдущей команды, то программа считает, что такая длинная пауза может быть только при ожидании следующей команды, поэтому программа посылает следующую команду из файла скрипта. При создании пускача SCRIPT величина паузы, управляющей решением о посылке следующей команды, задана равной 1-ой секунде, при этом предполагается, что паузы в распечатке выполнения отдельных команд намного меньше, чем одна секунда. Если же паузы в распечатке в процессе выполнения выполнения отдельных команд сравнимы с одной секундой или даже могут превышать одну секунду, то пользователь должен увеличить значение управляющей паузы, чтобы программа не посылала следующую команду в ситуации, когда оборудование "задумалось" на пару секунд в процессе выполнения предыдущей команды, но еще не выдало подсказку, указывающую на готовность к выполнению следующей команды.

Таким образом, чем больше управляющая пауза, заданная для выполнения файла скрипта, тем меньше вероятность отправки очередной команды преждевременно, когда оборудование "задумалось" над выполнением предыдущей команды, но еще не готово к выполнению следующей команды.

С другой стороны чрезмерное увеличение управляющей паузы приводит к тому, что алгоритм выполнения скрипта должен отсчитывать эту управляющую паузу до конца, когда оборудование находится в режиме подсказки, перед тем, как он будет посылать следующую команду из файла SCRIPTа. Например, если паузы в процессе выполнения отдельных команд не превышают одной секунды, а пользователь задал управляющую паузу, равной десяти секундам, то алгоритм выполнения скрипта обязан будет ждать по десять секунд перед отправкой каждой следующей команды. Значение управляющей паузы задается для выполнения всей последовательности команд, поэтому оно должно определяться, чтобы превышать задержки в процессе выполнения наихудшей комнды, т.е. такой команды, которая "задумывается" на самое долгое время в процессе своего выполнения. Допустимые значения упрвляющей паузы находятся в диапазоне от 1-3600 секунд. Эта управляющая пауза задается при создании пускача SCRIPT и по умолчанию равна 1 секунде.

Риск при использовании скрипта состоит в том, что, если управляющая пауза задана слишком маленькой, то скрипт может отправить следующую команду в тот момент, когда оборудование еще думает над выполнением предыдущей команды и не готово к приему следующей. Поэтому перед использованием пускача SCRIPT убедитесь(желательно в лаборатории), что ваше оборудование может обрабатывать такие нежелательные ситуации без создания больших проблем. Качественно изготовленное оборудование при получении следующей команды до того, как оно выдало подсказку для ввода следующей команды, или проигнорирует досрочно принятую команду или сохранит ее в буфере для последующего выполнения. Если оборудование низкого качества, то в редких случаях оно может реагировать непредсказуемым образом на получение внеочередной команды. Например, перезагрузиться или зависнуть.

Достоинство использования такого скрипта состоит в том, что при его создании и использовании от пользователя не требуется знаний программирования, а только правильно определить паузу на весь скрипт, чтобы надежно обнаруживать моменты, когда оборудование находится в режиме подсказки и ждет следующей команды.

Пускач SCRIPT не проверяет пришла ли подсказка с оборудования и какая это подсказка. Вместо этого он обнаруживает подсказку по величине паузы в результатах распечатки команды. В некоторых случаях этого может быть недостаточно, если пользователь хочет быть уверен на 100%, что подсказка пришла и это именно та подсказка, которую пользователь ожидает перед выполнением следующей команды. В этом случае можно использовать пускач I-SCRIPT. Для этого пользователь должен создать текстовый файл, в котором каждая строка содержит три компонента, отдепленные друг от друга с помощью разделителя "<PROXY>" и завершается символом окончания строки. Первый компонент также, как и для пускача SCRIPT - это команда, которую нужно отправить на удаленное оборудование. Второй компонент - это шаблон, написанный на языке Regular Expressions, который позволяет обнаружить необходимую подсказку в тексте распечатки выполнения команды. Третий компонент - задает максимальную величину паузы при получении текста распечатки выполнения команды. Путь к этому файлу указывается в пускаче I-SCRIPT при его создании.

При выполнении пускача I-SCRIPT указанный файл считывается с диска строчка за строчкой и каждая строка (состоящая из трех компонентов) выполняется по следующему алгоритму. Сначала команда посылается на удаленное оборудование, после этого текст результатов распечатки команды, поступающий на терминал, сканируется до тех пор, пока не произойдет одно из двух событий: в тексте распечатки выполнения команды обнаружена подсказка, которая соответствует заданному шаблону поиска, или при получении текста распечатки выполнения команды обнаружена пауза, которая превышает заданную максимальную паузу. Если подсказка обнаружена, то программа переходит к выполнению следующей строки, т.е к отправке следующей команды. Если обнаружена пауза, превышающая максимальную паузу (до обнаружения подсказки), то считается, что или оборудование зависло, или шаблон для поиска подсказки задан неправильно, поэтому выполнение скрипта прекращается и следующая команда не посылается.

Достоинства I-SCRIPT состоит в том, что:

Недостаток I-SCRIPTа состоит в том, что для выполнения каждой команды пользователь должен задать не только текст самой команды, но и дополнительные два параметра: - шаблон для поиска подсказки, возвращаемый данной командой; - максимальную паузу в получении текста результатов выполнения команды, которая может возникнуть при нормальном выполнении команды.

Необходимость указывать два дополнительных параметра для каждой команды требует больших усилий от пользователя и уже может рассматриваться как программирование.

Примечания:

  1. Максимальная пауза при выполнении команды служит как индивидуальный таймаут. Она задает, как скоро прекратится выполнение скрипта, если результаты выполнения команды больше не поступают, а необходимая подсказка все еще не найдена.
  2. Шаблон для поиска подсказки задается на языке Regex, при этом большинство символов в этом шаблоне должны совпадать точно, например, все алфавитно-цифровые символы. Например, шаблон "Password:" позволит найти подсказку "Password:". Но некоторые символы имеют специальные значения в языке Regex, например, чтобы найти подсказку "host$", нужно использовать шаблон "host\$" или "host[$]", поскольку знак $ имеет специальное значение в языке Regex.
  3. Если текстовое поле команды в первой строке файла I-SCRIPT является пустым, то никакая команда не посылается, а сразу начинается сканирование текста, прибывающего на терминал, для того, чтобы найти подсказку, заданную в поле шаблона поиска первой строки. Это удобно при использовании I-SCRIPT в режиме AUTOLOGIN, поскольку в этом случае он запускается, чтобы искать подсказку в начальных сообщениях сервера, которые посылаются автоматически сразу после того, как терминал подключается к серверу. Например, первая строка в файле I-SCRIPT может искать подсказку "Login:" в текстовых сообщениях, которые будут отправлены с сервера сразу после подключения терминала и запуска I-SCRIPT. При этом первая строка файла I-SCRIPT не должна посылать никакой команды, а просто начать искать подсказку в потоке текстовых сообщений, которые уже поступают с сервера.