2016-06-13 6 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行を必要とし、プログラムを開始するにはEnterキーを押してください。 'crontab'について知っていますか? 'cron'サブシステムを使うことで、プログラムの完全なハンズオン起動が可能になります。また、Qを改善し、RHで何が起こるか教えてください。何もない?うまくいけばエラーメッセージが表示されますか?あなたのQに正確なエラーメッセージをコピー/ペーストします(そして強調表示されたテキストの編集ツールで '{}'ツールを使用して、適切なフォーマットに保ちます)。最後に、RHで 'at 'が動作すると推測しますが、アクセス権の問題が発生しています。がんばろう。 – shellter

+1

という文が単純に「動作しません」という問題が発生した場合、ソリューションを提供することは困難です。 質問を編集して、 のどのようなことが起こるのか、実際の の結果とどのように違うのかをより詳しく説明してください。良いものを作るためのヒントについては、[ask]を参照してください。 –

答えて

1

<<EOFの間のスペースのために問題が発生している可能性があります。

すべての引数で構成される行を繰り返し出力するための特殊プログラムyesがあります。デフォルトでは 'y'を出力します。これらのプロンプトを介してスクリプトフローを強制するために特別に作成されました。

このように、あなたのコマンドの短いバージョンは、次のようになります。

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

ここでは、 '<< 'EOF''が使われていない限り、文書は二重引用符で囲まれた文字列として扱われます。 (マーカーの周りの単一引用符を参照してください?) – andlrc

+0

運がありません。私がちょうどタイプすれば: "はい| stopprogram"それは働く。しかし 'at'コマンドを使って正しく取得できない – user3772839

+0

あなたはどんな問題に遭遇していますか? – Leon

0

私は解決策を見つけました。これは動作します:

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

それです!

関連する問題