我有一個bash腳本來創建一個文件,我想通過telnet在最後發送一封電子郵件。但有時它會執行,有時不會。如何在bash腳本中的流水線命令之間插入延遲。例如。 cat文件| telnet mail.domain.com 25
末的命令是
cat tempfile | telnet mail.domain.com 25
在我mail.log以下錯誤看到它失敗時,接收服務器:
improper command pipelining after EHLO from domain.com ....etc
相同的腳本完美的作品如果不是郵件.domain.com我在本地主機啓動telnet會話,所以我非常確定文件格式正常,其餘的bash腳本也在工作。
我還使用標準的重定向,而不是管
telnet mail.domain.com 25 < tempfile
但同樣的結果有時候是好的,有時是沒試過。我認爲在重定向和telnet會話命令之間需要一個小的延遲,以便在telnet會話建立並給出響應後給出輸入,但我不知道該怎麼做。我試過在管道和重定向之間使用睡眠命令,它不會工作,可能是因爲輸入重定向到睡眠命令。
e.g. cat tempfile | telnet mail.domain.com 25 & sleep 1
的限制是我必須做一個bash腳本。可能嗎?此外,我不知道它是否有任何重要性,但腳本用於在debian擠壓與postfix /快遞設置的服務器之間工作,現在接收端設置了debian wheezy和postfix/dovecot。
在此先感謝您的幫助
'{echo -n;睡5次; cat tempfile; } | ...'會避免不必要的子shell。 – chepner
非常感謝您的快速響應:)這完美無瑕。即使沒有回聲--n它仍然會等待5秒,然後寫剩下的。我從來沒有想過將它包含在()中。我嘗試{},它仍然有效,所以兩種答案都很好。但是,{}我必須使用echo -n; – gabtzi