新しいデータベースにpython manage.py syncdb
を含むいくつかのタスクを実行するbashスクリプトがあります。このコマンドは、管理者のログイン情報のような入力を要求します。現在、私は毎回これをコマンドラインに入力するだけです。これらの応答をbashスクリプトの一部として自動的に提供する方法はありますか?別のプログラムの応答を与えるためのbashスクリプトの記述方法
ありがとう、私はbashについて何も知らない。
私はUbuntu 10.10を使用しています。
新しいデータベースにpython manage.py syncdb
を含むいくつかのタスクを実行するbashスクリプトがあります。このコマンドは、管理者のログイン情報のような入力を要求します。現在、私は毎回これをコマンドラインに入力するだけです。これらの応答をbashスクリプトの一部として自動的に提供する方法はありますか?別のプログラムの応答を与えるためのbashスクリプトの記述方法
ありがとう、私はbashについて何も知らない。
私はUbuntu 10.10を使用しています。
私は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
問題のプログラムのようなstdin
からの入力を読み取ることができない場合は、次の
echo "some input" | your_progam
、あなたはあなたがにデフォルト値を与えることができexpect
および/またはautoexepect
のようなものに目を向ける必要があります変数。 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
を使用することができます。この方法であなたはこのようにそれを行うことができ、例えば、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
このアプローチの下側には、あなたは素晴らしい方法ではありませんプレーンテキストでパスワードを保存しているです。
私はPythonがstdinから読み込んでいると信じています。 –