以下のコードは離れたに引数を渡すために、「BashスクリプトでExpectを使用してSSHコマンドのパスワードを提供する」を選択しましたgit push
。無効な uname+pwd を渡す例外は発生せず、逆に正しい uname+pwd を渡す場合は発生しません。実際には何も押さないでください。この問題を解決するには?
git_push.sh
if (( $# == 2 ))
then
:
else
echo "expecting 'username pass', got $@"
exit 1
fi
user="$1"
pass="$2"
expect - <<EOF
spawn git push
expect 'User*'
send "$user\r"
expect 'Pass*'
send "$pass\r"
EOF
端末:
$ [path]/git_push.sh
spawn git push
Username for 'https://github.com': foo
Password for 'https://[email protected]':
または(ワイルドカードなし):
spawn git push
expect "Username for 'https://github.com': "
send "$user\r"
expect "Password for 'https://[email protected]': "
send "$pass\r"
答え1
解決するために予想される質問:
expect - <<EOF
spawn git push
expect 'User*'
send "$user\r"
expect 'Pass*'
send "$pass\r"
EOF
一重引用符はExpectに特別な意味を持たないため、UserおよびPassプロンプトでリテラル一重引用符を見つけることをお勧めします。これらのプロンプトには一重引用符が含まれていないため、タイムアウト
expect
(デフォルトは10秒)が発生するまでコマンドは中断されます。パスワードを送信した後は、プッシュが完了するのを待ちません。予想されるスクリプトに実行するコマンドが不足して早期に終了し、gitプロセスが終了します。すべての後に
send
何かexpect
をする必要があります。この場合、生成されたコマンドが終了すると予想されます。expect eof
expect - <<_END_EXPECT
spawn git push
expect "User*"
send "$user\r"
expect "Pass*"
send "$pass\r"
set timeout -1 ; # no timeout
expect eof
_END_EXPECT