3

Я пытаюсь автоматизировать командный сценарий Unix и направить вывод в mailx, чтобы я мог знать, нужно ли мне вручную редактировать файлы перед их отправкой по FTP. Многое из этого автоматизировано, но из-за ошибки мне нужно вручную приостановить процесс автоматизации, если скрипт обнаруживает определенные данные.

Я пытаюсь запустить скрипт display_orders. После запуска сценария он запрашивает ввод, а затем возвращает вывод. Мне нужно дать сценарию значение TargetSubID, а затем перенаправить вывод в mailx.

username@unix$ display_orders
TargetSubID: BROKERA
Size:
Side:
Symbol:

There were 3 trades found!

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

Я пытался делать такие вещи, как:

display_orders << EOD
? BROKERA
?
?
?
?EOD

Но скрипт работает и кажется, что есть проблема с разбором ввода (которую я не ожидаю от вас). Глядя на код для display_orders, он выглядит довольно стандартным Perl, разбивая входные данные и анализируя их.

Я хотел бы просто получить решение командной строки для этого, чтобы я мог добавить его в мои задания cron (плюс мне всегда было любопытно, как автоматизировать консольные приложения на основе ввода).

Я пробовал поискать в Google, но мой Google Fu слабо в этой теме. Я думаю, что просто хочу перенаправить ввод в консольное приложение, но, по-моему, я принципиально не понимаю, как работает оператор <<.

В конце я бы хотел решение, которое могло бы выглядеть примерно так (я понимаю, что это не работает, но это может помочь кому-то понять, что я пытаюсь сделать):

display_orders << BROKERA | mailx -s 'Daily OATS Check' some@email.com

1 ответ1

3

Я думаю, что отсутствующий ингредиент - это то, как работает ваш скрипт display_orders (то есть без специфики проблема не может быть должным образом решена).

"ожидать", безусловно, является "лучшим" решением.

Я, однако, придумал быстрый и неприятный взлом, который может (но, вероятно, не будет) работать на вас. Если проблема заключается в небольшой задержке ввода, приводящей к путанице в сценарии display_orders и не чувствительной ко времени, вы можете вслепую подождать короткий промежуток времени между ответами -

(
echo $BROKERA
sleep 1
echo $Size
sleep 1
echo $Side
sleep 1
echo $Symbol
) | display_orders | mailx -s 'Daily OATS Check' some@email.com

Конечно, сон 1 может быть изменен на более длинное значение, и $BROKERA , $SIZE , $Side и $Symbol уже установлены. Это клочок, потому что у него нет обратной связи, чтобы проверить, отвечает ли он на правильный вопрос, и он медленный и обычно юк, но у него, вероятно, нет никаких специальных программных предпосылок сверх того, что есть на большинстве систем)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .