免責事項::私はアクティブなシェルスクリプトではありません。
コンソール出力に応答するスクリプトを作成するには?たとえば、私は深夜ごとに定期的にストレージの変更をバックアップサーバーに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で書かれています。