ショボ短歌会

Unix系でヒアドキュメントを利用する場合について教えて下さい。

ヒアドキュメント(一般的にはEOFで囲む?)を利用すると、複数行に渡ったデータをコマンドに対して送る事が出来ると思います。しかし、suコマンドにヒアドキュメントを使う事は出来ません。

ヒアドキュメントをコマンドに対して指定した場合、内部的(プロセスの生成、ファイルディスクリプタの生成、ヒアドキュメントデータの受け渡し、解析等)にはどのような動作になりますでしょうか。また、何故suコマンドの場合はヒアドキュメントが有効でないのでしょうか(現在はexpectを利用しています)

ヒアドキュメント内の一行一行がどのようなタイミングで解釈され実行されるのか、ご存知かどこかに資料があれば教えていただきたく思います。

A 回答 (2件)

ヒアドキュメントの中身は、コマンド実行の前に、ひとかたまりのファイルとして作成され、それがコマンドの標準入力に繋がります。



command <<EOF
a
b
c
EOF
は、
echo "a
b
c" > tmpfile
command < tmpfile
とほぼ同じです。

su とか passwd コマンドは、パスワードを標準入力からでなく、端末から入力するので、自動化にはexpectなど疑似端末を扱えるソフトが必要です。

標準入力はデフォルトでは端末ですが、リダイレクトできるので端末とイコールではありません。端末はリダイレクトできません。
    • good
    • 0
この回答へのお礼

passwdコマンドでも、バージョンにより標準入力に対応していたりしますね

シェルから起動して、リモートにSSHでログインして、そこから更にsuを打つ、と言った場合、プロセスの移動を追うのは中々大変そうですね(^^;

仰る通りexpectのような受け取った出力によって操作を変えるプログラムが
必要になりそうですね・・・。

有難うございました

お礼日時:2009/07/03 00:41

suでパスワードを入れたいということでしょうか?


一般にヒアドキュメントは標準入出力をまとめるときにつかいます。
実行コマンドが標準入力に対応していなければ意味がないでしょう。
    • good
    • 0
この回答へのお礼

素早いご回答有難う御座います。

suでパスワードを入れたいと言うよりは、どう言う理由で出来ないのか裏側の原理を把握したく思いました。

ヒアドキュメント内部のデータをどう解釈して処理するかは行き先のプロセス次第と言う事ですか。(例えば改行コードをコマンドの区切りとみなすかなど)

ヒアドキュメント自体の動作は、あくまで文字列をシェルに解釈させずそのままの状態で渡すための物という事でしょうか?改行時にバックスラッシュを打つ場合との使い分けが良く分からなくなってきました。。。

お礼日時:2009/06/29 14:44

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