ここから質問投稿すると、最大4000ポイント当たる!!!! >>

/etc/ldap.confからpam_passwordで始まる行を見つけてその行を書き換えて上書きする関数を作ろうとしているところです。
以下のようにしましたがデバッグのためのechoでの出力が見えませんでした。
echoで1行ずつ列挙されるのを確認したいのですがどうしたらよいですか?

function func1 {
while read LINE ; do
echo $LINE
done < $1
return ""
}

buf=`func /etc/ldap.conf`

このQ&Aに関連する最新のQ&A

A 回答 (4件)

sed使えば良いと思いますが。



shで行なう事もできます。

サンプルはpam_passwordで始まる行を見つけて先頭に#を追加してコメント化する例です。(sed使用とsh内部コマンド使用)


#! /bin/sh
LDAPCONF="/etc/ldap.conf"
LDAPCONFBK="$LDAPCONF.back"
WORK="/tmp/${LDAPCONF##*/}.$$"

sed -e '/^pam_password/s/^/#/' $LDAPCONF > $WORK
mv $LDAPCONF $LDAPCONFBK
mv $WORK $LDAPCONF


#! /bin/sh
#
LDAPCONF="/etc/ldap.conf"
LDAPCONFBK="$LDAPCONF.back"
WORK="/tmp/${LDAPCONF##*/}.$$"

fix() {
while read buff ; do
case "$buff" in
pam_password*)
echo '#' $buff ;;
*)
echo $buff ;;
esac
done < "$1"
return 0
}

fix $LDAPCONF > $WORK
mv $LDAPCONF $LDAPCONFBK
mv $WORK $LDAPCONF
    • good
    • 0

#2さんの


> リダイレクトしてファイル作って書き換えればいい
とあるように、
sed 's/^pam_password.*/hoge/' /etc/ldap.conf > なんか適当なファイル
とした後で
mv なんか適当なファイル /etc/ldap.conf
とやれ、ってこと。

> # echo sed 's/^pam_password.*/hoge/' /etc/ldap.conf > /etc/ldap.conf
> # sed 's/^pam_password.*/hoge/' /etc/ldap.conf | echo > /etc/ldap.conf
なんて、読み込み中のファイルに直接書こうとしてもだめ。

あるいは、sedには-iオプションというのがあって、指定した入力ファイルを直接書き換えることもできます。
sed -i 's/^pam_password.*/hoge/' /etc/ldap.conf


というか
> # echo sed 's/^pam_password.*/hoge/' /etc/ldap.conf > /etc/ldap.conf
はechoによって「sed 's/^pam_password.*/hoge/' /etc/ldap.conf」と出力されたものを/etc/ldap.confにリダイレクトする、という意味
sedとかがただの文字列になってしまい、置き換えなどの処理は実行されない。

> # sed 's/^pam_password.*/hoge/' /etc/ldap.conf | echo > /etc/ldap.conf
echoには「標準入力から取り込んだ文字を表示」なんて機能は無いから、パイプで渡しても無意味。
実質 「echo > /etc/ldap.conf」でしかない。

#1さんの指摘にもあるバッククオートの使いかたといい、もうちょっと基礎の勉強をした方がいいと思いますよ。
    • good
    • 0

一体どうしてこうなったのかよく分からないけれど、


特定行の書き換えなら一行でできるよ。
# sed 's/^pam_password.*/hoge/' /etc/ldap.conf
これをリダイレクトしてファイル作って書き換えればいい。
そうすると、pam_passwordから始まる行は、hogeに書き換えられてる。

この回答への補足

# sed 's/^pam_password.*/hoge/' /etc/ldap.conf
を実行しました。
コンソールには置換された結果が表示されましたが/etc/ldap.confは更新されていませんでした。

sedの結果を/etc/ldap.confに書き込む方法を教えてください。
# echo sed 's/^pam_password.*/hoge/' /etc/ldap.conf > /etc/ldap.conf
# sed 's/^pam_password.*/hoge/' /etc/ldap.conf | echo > /etc/ldap.conf

補足日時:2011/07/01 13:02
    • good
    • 0

バッククォートの意味は理解できているんだろうか....

    • good
    • 0

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


人気Q&Aランキング