質問: expectを使用しない対話型処理 シェルスクリプトにおける、対話型(adduser、passwd)の処理を自動化したいと考えております。 expectを使用すれば簡単なのですが、新たにインストールしないといけないパッケージが数個あるため、避けたいと考えております。 そこで質問です。 expectを使用しなくても、対話型の処理を自動化できる方法はありますでしょうか。違う言い方をすれば自動化するプログラムを作成できるのかということになります。 ちなみにヒアドキュメントを使用しましたが下記のようになってしまい、うまくいきません。 いろいろと助言していただけると光栄です。 プログラム----- !/bin/sh user_name1="oshietegoo" user_pass1="kaiketsu" adduser $user_name1 << e $user_pass1 $user_pass1 e --------------- 結果----------- changing password for oshietegoo new password: retype password: passwd: password for oshietegoo is unchanged --------------- よろしくお願い致します。
回答: 入力を標準入力からでなく、端末から読むプログラムはシェルスクリプトで直接は扱えません。プログラムから操作するためには「疑似端末インタフェース」(man pty参照) を使います。シェルスクリプトからptyを使いやすくするためのコマンドがexpectです。ptyでググってみると、rubyがptyライブラリを持っているようですけど、expectもインストールしたくないならきっとrubyもだめですよね。 あとは、自分でcで書くことはもちろん出来ます。どう書けばいいかはman pty以上のことは知らないのでアドバイスできません。