Как вставить задержку между командами конвейерной обработки в сценарии bash. Например, файл cat | telnet mail.domain.com 25

У меня есть сценарий bash, который создает файл, и я хотел бы отправить электронное письмо в конце через telnet. Однако иногда это исполняется, а иногда и не будет.

Команда в конце

cat tempfile | telnet mail.domain.com 25

На получающем сервере я вижу в mail.log следующую ошибку, когда она терпит неудачу:

improper command pipelining after EHLO from domain.com ....etc

Тот же скрипт отлично работает, если вместо mail.domain.com я запускаю сеанс telnet в localhost, поэтому я уверен, что формат файла в порядке, а остальная часть скрипта bash тоже работает.

Я также пытался использовать стандартное перенаправление вместо канала

telnet mail.domain.com 25 < tempfile

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

e.g. cat tempfile | telnet mail.domain.com 25 & sleep 1

Сужение в том, что я должен сделать это в сценарии bash. Является ли это возможным? Кроме того, я не знаю, имело ли значение какое-либо значение, но сценарий, используемый для работы между серверами в debian, сжимается с установкой postfix/courier, и теперь принимающая сторона настроена с debian wheezy и postfix/dovecot.

Заранее спасибо за помощь

Ответ 1

Вы можете попробовать что-то вроде:

(echo -n; sleep 5; cat tempfile) | mail.domain.com 25

чтобы открыть соединение и ничего не писать, подождите 5 секунд и напишите все остальное.