2016-06-13 42 views
0

我有一個程序接受2個提示(y/n)。例如:發送輸入到「at命令」調用的程序

stopprogram

do you want to stop the program (Y/N)? y 
do you want to send an email to the admin about it (Y/N)? y 

現在,我想的是用 '在' 命令實現自動化。在Solaris上但不在Linux上的以下工作RHEL:

at now +5 minutes << EOF 
> for i in {1..2} 
> do 
> echo 'y' 
> done | stopprogram 
> EOF 
commands will be executed using /usr/bin/bash 
... 
... 

任何想法?謝謝!

+0

你說自動化運行你的程序,但'at'需要一個cmd行,並且你按下回車鍵來啓動程序。你知道'crontab'嗎?使用'cron'子系統可以完全解除程序的啓動。此外,您需要改進您的問題並告訴我們在RH中會發生什麼情況;什麼都沒有?或者希望你得到一個錯誤信息?將精確的錯誤信息複製/粘貼到你的Q(並在編輯工具上使用該突出顯示的文本上的'{}'工具以保持格式正確)。最後,猜測'at'在RH中有效,但是你遇到了權限問題。祝你好運。 – shellter

+1

當問題 聲明僅僅是「它不起作用」時,很難提供解決方案。請編輯您的 問題,以更全面地描述您的 預期會發生什麼,以及與實際的 結果有何不同。請參閱[問]提示什麼使得一個好的 解釋。 –

回答

1

您的問題可能是由於<<EOF之間的空間所致。

請注意,有一個特殊的程序yes用於重複輸出由其所有參數組成的行。默認情況下,它輸出'y'。它是專門爲通過這些提示強制執行腳本流而創建的。

因此,你的命令的短版本是這樣的:

at now +5 minutes <<EOF 
    yes | stopprogram 
EOF 
+0

這裏的文檔被視爲雙引號字符串,除非使用<< <<'EOF'',在這種情況下,它被視爲單引號字符串。 (請參閱標記周圍的單引號?) – andlrc

+0

沒有運氣。如果我只輸入:「yes | stopprogram」,它就起作用。但不能正確使用'at'命令 – user3772839

+0

你碰到什麼樣的問題? – Leon

0

我找到了解決辦法。這將工作:

at now+5 min <<EOF 
bash -l -c 'yes | stopprogram' 
EOF 

就是這樣!