ファイルとttyから入力をリダイレクトする必要があります。

ファイルとttyから入力をリダイレクトする必要があります。

私はバックアップのためにアマンダを運営しています。日付が異なる複数のファイルを回復する必要があります。ファイル名は同じであるため、複数の回復セッションを実行する必要があります。それでこの文章を書かなければならないと思いました。これは私のスクリプトです。

sethost myhost
setdisk /var
setdate 2017-03-25-01-30-01
cd log/httpd
ls
add ssl_request_log
extract

シェルリダイレクトを使用してスクリプトを実行します。

amrecover my_Config < /home/me/thatScript

問題は一度amrecoverが見ればタブレットコマンドが私に確認を要求しました。

Continue? [Y/n]:

「extract」の後に「Y」と入力しても効果はありません。 Amrecoverは私が「Y」を入力するのを待っています。 amrecoverにはstdinだけでなくttyの入力も必要です。

私はamrecoverのマニュアルページを見て、誰かがこの問題を解決したかどうかを知るためにグーグルをしました。また、コードがコンパイルされているため、確認を待たないとスクリプトをハックできません。

スクリプトから入力を取得し、/dev/ttyを標準入力にリダイレクトする方法はありますか?

ベストアンサー1

amrecoverこれはインタラクティブスクリプトで作成されているため、通常はこれを自動化するために使用しますexpect。このユーティリティは、2種類のプロンプト(および)tclの会話を確認し、さまざまな方法で応答できます。たとえば、PATHにファイルを作成して実行可能にし()、次の内容をその中に入れます。amrecover>Continue? [Y/n]:myrecoverchmod +x myrecover

#!/usr/bin/expect
spawn amrecover my_Config 
expect   -ex {Continue? [Y/n]:}  { send "y\r"; exp_continue } \
         -ex {amrecover>}        { gets stdin input; 
               if ![eof stdin] { send $input; send "\r"; exp_continue } }
close
wait

次に、次のように実行します。

./myrecover </home/me/thatScript

スクリプトexpectはコマンドを分岐して実行し、amrecover my_Configptyを介してコマンドに接続し、2つのプロンプトへの入力を聞きます。一般的なamrecover>プロンプトが表示されたら、expectスクリプトの標準入力、コマンドセットから1行を読み(ファイルの終わりが得られなかった場合)、改行文字(\rに変換)を使用してその行をプログラムに送信します。これ)。これexp_continueにより、コマンドは次のプロンプトと一致するように再度繰り返されます。ファイルの最後でプログラムへの接続を閉じ、プログラムが終了するのを待ちます。

amandaこのように実行すると、プロンプトが異常な状況などである場合、混乱を招く可能性があります。

おすすめ記事