2011-01-19 6 views
4

新しいデータベースにpython manage.py syncdbを含むいくつかのタスクを実行するbashスクリプトがあります。このコマンドは、管理者のログイン情報のような入力を要求します。現在、私は毎回これをコマンドラインに入力するだけです。これらの応答をbashスクリプトの一部として自動的に提供する方法はありますか?別のプログラムの応答を与えるためのbashスクリプトの記述方法

ありがとう、私はbashについて何も知らない。

私はUbuntu 10.10を使用しています。

答えて

3

私はSFでsimilar questionと答えましたが、これはもっと一般的であり、それはSOにあるのが良いです。

"これはあなたのマシンにすでにあるでしょう[試しwhich expect]これは対話型のコマンドラインの自動化のための標準ツールです.Tclライブラリです。スキルは道に沿って無料です。注意してください、それは中毒性です。

この場合、pexpectもあります。これはPythonのようなものです。

#!/path/to/expect 
spawn python manage.py syncdb 
expect "login:*" 
send -- "myuser\r" 
expect "*ssword:*" 
send -- "mypass\r" 
interact 
3

問題のプログラムのようなstdinからの入力を読み取ることができない場合は、次の

echo "some input" | your_progam 

、あなたはあなたがにデフォルト値を与えることができexpectおよび/またはautoexepect

+0

私はPythonがstdinから読み込んでいると信じています。 –

0

のようなものに目を向ける必要があります変数。 4行目と5行目で、変数RSRCとLOCALが設定されていない場合は、それらのデフォルト値に設定されます。あなたのスクリプトにオプションを与えるか、デフォルトのもの

#!/bin/bash 
RSRC=$1 
LOCAL=$2 
: ${RSRC:="/var/www"} 
: ${LOCAL:="/disk2/backup/remote/hot"} 
rsync -avz -e 'ssh ' [email protected]:$RSRC $LOCAL 
0

を使用することができます。この方法であなたはこのようにそれを行うことができ、例えば、login.pyスクリプト与えられた:

if __name__ == '__main__': 
    import sys 
    user = sys.stdin.readline().strip() 
    passwd = sys.stdin.readline().strip() 

    if user == 'root' and passwd == 'password': 
     print 'Login successful' 
     sys.exit(0) 

    sys.stderr.write('error: invalid username or password\n') 
    sys.exit(1) 

良い-credentials.txt

root 
password 

悪い-credentials.txt

user 
foo 

そして、あなたが使用して自動的にログインを行うことができます。

$cat good-credentials.txt | python login.py 
Login successful 

$cat bad-credentials.txt | python login.py 
error: invalid username or password 

このアプローチの下側には、あなたは素晴らしい方法ではありませんプレーンテキストでパスワードを保存しているです。

関連する問題