5

sshを使用して多くのコンピューターにJavaをインストールしたいので、(大まかに)実行するbashスクリプトを書きたいと思います:

for c in computers
do    
   scp jre--.rpm $c
   ssh $c 'sudu -s; chmod a+x jre--.rpm ; ./jre--.rpm; echo "success!"'
done

問題は、Java のインストール中に通知を「読み」、最後に「はい」と入力する必要があることです。どうすればいいのですか?「期待する」より簡単な方法はありますか?そうでない場合は、bashスクリプトにどのように適合させるのですか?

どうもありがとう

4

2 に答える 2

2

まず、必要なキーストロークを次のようなファイルに記録します。

cat > keystrokes

キーストロークの記録が終了したら、 Ctrl+Cを押します。ファイルの内容を確認してください。TABなどの一部のキーは正しく記録されない場合がありますが、テキストエディタを使用してファイルを編集することはできます。コンソールを下にスクロールする場合(たとえば、からの出力を読み取る場合more)は、通常、スペースバーを使用して実行できることに注意してください。

すでにrpmで行っているように、このファイルをscpすることができます。次に、キーストロークファイルの内容をインストーラーの標準入力にパイプします。

cat keystrokes | ./someinstaller

編集:それが機能しないと聞いて申し訳ありません。たぶん、この種のもののために設計されたUnixツールであるexpectを見ることができます。ほとんどのgnu/linuxディストリビューションに含まれていると思います。Pythonに精通している場合は、代わりにpexpectを使用することをお勧めします。

于 2009-09-30T01:43:01.877 に答える
1

期待するのが道です(http://www.dnmouse.org/java.htmlに感謝します):

   for c in computers
   do    
       scp jre--.rpm $c
       ssh -t $c 'sudo -s; yum -y install expect; sudo chmod a+x jre--.rpm'
       ssh -t $c '/usr/bin/expect -c \
       "set timeout -1; spawn ./jre-6u13-linux-x64-rpm.bin; sleep 1; send -- q\r; sleep 1; send -- yes\r; expect eof"
       echo "success!"'
   done
于 2009-09-30T12:32:13.843 に答える