コンソール出力に応答するシェルスクリプト

コンソール出力に応答するシェルスクリプト

免責事項::私はアクティブなシェルスクリプトではありません。

コンソール出力に応答するスクリプトを作成するには?たとえば、私は深夜ごとに定期的にストレージの変更をバックアップサーバーにsvnsyncするようにcronを設定したいと思います。問題は、同期のために認証資格情報を求めるメッセージが表示されることです。

svnsyncsync はログインを指定するオプションを受け入れないため、単純な cron コマンドは必要なくなりました。スクリプトを起動できると思いますが、コンソール出力に応答する方法を理解しようとしています。

たとえば、

ken@server:~$ svnsync sync https://svn3.backup.net/svn/mirror
Authentication realm: <https://svn3.backup.net/svn/mirror:443> backup.net Subversion Backup
Password for 'ken':
***<send return key>***
Username:***<specify backup.net username>***
Password for '<the name>':***<specify password for username>***
<It proceeds to check out>

***< message >***スクリプトが応答したいタスクはどこにありますか?

答え1

「svnsync syncがログインを指定するオプションを許可していません」と述べたとき、懐疑的であることを確認しました。文書推測してみてください。する:

--source-password
--source-username
--sync-password
--sync-username

これらのオプションは、単純なクローンスクリプトに戻るのに十分です。

あなたの状況に戻る本物これらのオプションを指定することはできませんが、プログラムの標準入力にデータを送信するラッパースクリプトを書くのはまだ簡単です。たとえば、可能タスク(program実行したいプログラムはどこにあり、textプログラムに送信したいテキストが保存されているファイルはどこにありますか?):

program < text

ただし、認証のためにプログラムはセキュリティ上の理由から準備ができているか、準備されてttyいない状態で作成されることがよくあります。stdin私はそれに慣れていませんが、この場合でもまだ偽の端末を作成できます。ここはexpect使用してください。

答え2

expect役に立つかもしれません。

一つあるオライリーチュートリアル

答え3

ただし、これは一部のスクリプトでパスワードを明示的に作成することを意味します。
これは良い考えではありません。

svnsyncにはSSHキーオプションはありませんか?

答え4

2つの同様の解決策:

  • expect(他の答えからわかるように)TCLが必要です。
  • pexpect、純粋なPythonで書かれています。

関連情報