アプリ版:「スタンプのみでお礼する」機能のリリースについて

シェルスクリプトにおける、対話型(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
---------------

よろしくお願い致します。

A 回答 (1件)

入力を標準入力からでなく、端末から読むプログラムはシェルスクリプトで直接は扱えません。

プログラムから操作するためには「疑似端末インタフェース」(man pty参照) を使います。シェルスクリプトからptyを使いやすくするためのコマンドがexpectです。ptyでググってみると、Rubyがptyライブラリを持っているようですけど、expectもインストールしたくないならきっとRubyもだめですよね。

あとは、自分でCで書くことはもちろん出来ます。どう書けばいいかはman pty以上のことは知らないのでアドバイスできません。
    • good
    • 0
この回答へのお礼

返答が遅くなり申し訳ございません。
adduserのCソース側に問題があり、ヒアドキュメントではエラーになる条件でした。
ヒアドキュメントの文字列が正常終了するコマンドを探しだし、実行したところうまくいきました。

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

お礼日時:2008/12/02 10:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!