![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Unix系でヒアドキュメントを利用する場合について教えて下さい。
ヒアドキュメント(一般的にはEOFで囲む?)を利用すると、複数行に渡ったデータをコマンドに対して送る事が出来ると思います。しかし、suコマンドにヒアドキュメントを使う事は出来ません。
ヒアドキュメントをコマンドに対して指定した場合、内部的(プロセスの生成、ファイルディスクリプタの生成、ヒアドキュメントデータの受け渡し、解析等)にはどのような動作になりますでしょうか。また、何故suコマンドの場合はヒアドキュメントが有効でないのでしょうか(現在はexpectを利用しています)
ヒアドキュメント内の一行一行がどのようなタイミングで解釈され実行されるのか、ご存知かどこかに資料があれば教えていただきたく思います。
No.2ベストアンサー
- 回答日時:
ヒアドキュメントの中身は、コマンド実行の前に、ひとかたまりのファイルとして作成され、それがコマンドの標準入力に繋がります。
command <<EOF
a
b
c
EOF
は、
echo "a
b
c" > tmpfile
command < tmpfile
とほぼ同じです。
su とか passwd コマンドは、パスワードを標準入力からでなく、端末から入力するので、自動化にはexpectなど疑似端末を扱えるソフトが必要です。
標準入力はデフォルトでは端末ですが、リダイレクトできるので端末とイコールではありません。端末はリダイレクトできません。
passwdコマンドでも、バージョンにより標準入力に対応していたりしますね
シェルから起動して、リモートにSSHでログインして、そこから更にsuを打つ、と言った場合、プロセスの移動を追うのは中々大変そうですね(^^;
仰る通りexpectのような受け取った出力によって操作を変えるプログラムが
必要になりそうですね・・・。
有難うございました
No.1
- 回答日時:
suでパスワードを入れたいということでしょうか?
一般にヒアドキュメントは標準入出力をまとめるときにつかいます。
実行コマンドが標準入力に対応していなければ意味がないでしょう。
素早いご回答有難う御座います。
suでパスワードを入れたいと言うよりは、どう言う理由で出来ないのか裏側の原理を把握したく思いました。
ヒアドキュメント内部のデータをどう解釈して処理するかは行き先のプロセス次第と言う事ですか。(例えば改行コードをコマンドの区切りとみなすかなど)
ヒアドキュメント自体の動作は、あくまで文字列をシェルに解釈させずそのままの状態で渡すための物という事でしょうか?改行時にバックスラッシュを打つ場合との使い分けが良く分からなくなってきました。。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) ヒアドキュメントの書き方 4 2022/11/01 01:03
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- サーバー ログオンユーザーがいない場合に自動再起動 1 2022/09/28 09:53
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
- UNIX・Linux cronの@rebootでのdateコマンドの実行につきまして 2 2023/06/11 16:23
- その他(プログラミング・Web制作) プログラムの起動、利用について、使用期間を設定する方法 3 2023/08/06 21:03
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(コンピューター・テクノロジー) ffmpeg 動画から複数の箇所を指定して、一度の作業で同時に切り出したい 1 2022/07/03 08:35
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
dd実行 途中経過
-
アクセスのボタンから指定のワ...
-
UNIX コマンドにおける # や円...
-
SCコマンドでアクセス拒否
-
マックにタスクマネージャーは...
-
vbaで「最前面に」とする方法は?
-
Ctrl+Zで戻りすぎた場合、逆に...
-
このエラー内容について教えて...
-
閉じている全ての+ボタンを一...
-
windows コマンド rmdir
-
cd-romドライブを閉じる コマ...
-
jsLinuxのコマンドについて。 a...
-
gfortranでmakefile
-
JSLinuxのコマンドについて。 a...
-
Linuxコマンドは何の言語で書か...
-
shutdownコマンドをキャンセル...
-
compressコマンドってなくなっ...
-
Linux:sedコマンドで置換がし...
-
Excel下部のメニューが消えた
-
bash での空文字判定?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
UNIX コマンドにおける # や円...
-
Ctrl+Zで戻りすぎた場合、逆に...
-
[バッチファイル]レジストリ値...
-
SCコマンドでアクセス拒否
-
MacOS ターミナルについて
-
shutdownコマンドをキャンセル...
-
Mac Homebrewについて
-
アクセスのボタンから指定のワ...
-
Linuxコマンドは何の言語で書か...
-
ワイルドカードを使ってでフォ...
-
このエラー内容について教えて...
-
コマンド履歴が~/.bash_history...
-
Excel下部のメニューが消えた
-
echo $!の意味を教えてください
-
vbaで「最前面に」とする方法は?
-
Linux:sedコマンドで置換がし...
-
コマンドプロンプトにおけるコ...
-
Powershell エクセル検索 完全...
-
AIXでの文字コード、改行コード...
-
DOSコマンドについて
おすすめ情報