0

私は期待を必要とする本当に単純なbashスクリプトを持っています。bashからexpectに値を渡す必要があり、別のサーバーなどにsshしようとはしていません(ssh経由で別のサーバーにログインすることに関する質問しかないように見えるため)。

アイデアは単純に次のようなものです。

#!/usr/bin/env bash

echo "Please enter your password: "
read PASSWD

x=$(expect -c '
    spawn su -c 'whoami'
    expect "Password:"
    send "$PASSWD\r"
    interact
')

したがって、これは機能しません。Expect シェルは $PASSWD 変数を認識しません。これはどのように達成できますか?

ありがとうございました。

4

2 に答える 2

0

もう 1 つのオプションは、環境に PASSWD を保存し、そこで取得できるようにすることです。

read -p "Your password: " passwd
export passwd

expect -c '... ; send "$env(passwd)\r"; ...'

おそらくセキュリティ上の最善の選択は、パスワードのプロンプトを期待することです。これにより、パスワードはコマンドラインにも環境にも表示されません。

expect -c <<'END'
    stty -echo 
    send_user "Your password: " 
    expect_user -re "(.*)\n" 
    send_user "\n" 
    set passwd $expect_out(1,string)
    stty echo 

    # your script starts here
    ...
    send "$passwd\r"
    ...
END
于 2013-05-01T21:11:40.460 に答える