- ベストアンサー
リダイレクションについて
「<<」とはヒアドキュメントと呼ぶらしいのですが・・・。 まだまだ初心者ですので簡単なことしか分からないのです。 二行以上にわたって文字のある、abc.txtというファイルをつくりたいんですが、以下のように実行してもうまくできませんでした。 bash$ echo abc << abc.txt また、ヒアリダイレクションの利用価値というものはあるのでしょうか? perlの場合のヒアリダイレクションの利便性は良く分かったのですが・・・。 すいません。どうか、お答えをよろしくお願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
この回答中, 行頭の$はプロンプトなので,入力しなくていいです. [ENTER]は [[] [E] [N] [T] [E] [R] []] と順に打つのではなく, Enter キーを押してください. ------------------------------------------------------------ まず, $ echo "script no test" [ENTER] script no test $ echo "script wo sitteiruto benri desu" [ENTER] script wo sitteiruto benri desu $ pwd [ENTER] honyarara $ を実行してみてください.いや,実行しなくてもいいですけど. 例えば,このような作業を何度も行う場合,50文字ぐらい(かな)を 毎回打つのは面倒くさいですよね. そこでスクリプトが登場です.e2pという名前のファイルを作って, 内容を ------------------------------------------------------------ #!/bin/bash echo "script no test" echo "script wo sitteiruto benri desu" pwd ------------------------------------------------------------ としてください.(実は名前はe2pじゃなくて何でもいいですが.) 次に,chmod コマンドを実行してください. $ chmod u+x e2p [ENTER] $ そして, $ ./e2p [ENTER] script no test script wo sitteiruto benri desu honyarara $ このように,あらかじめコマンドを並べたファイルを作っておくことで, そのファイル名だけでコマンド群を実行することができます. ------------------------------------------------------------ どうでしょうか.
その他の回答 (5)
- wolv
- ベストアンサー率37% (376/1001)
スクリプト内で $ cat >abc.txt > a > b > c > (Ctrl+C) と同様の機能が欲しい場合は,ヒアドキュメントの機能がないと うまくいきません. (いちおうecho でもできるが.) cat >abc.txt a b c (Ctrl+C) というスクリプトを作って実行したらどうなるか試してください. 最終的には aを実行しようとしたときに, aというコマンドが見つからないというエラーになります. よくわからなければ, cat >abc.txt <<-- a b c -- というスクリプトを作って実行した場合と比べてください. 「……というスクリプトを作って実行し‥‥」 の意味がわからなければ,別途質問するか, 補足してください. ------------------------------------------------------------ 大抵のプログラムは Ctrl-C で強制終了できますが,あくまでも強制終了であり, 全てのプログラムでうまく止まるとは限りません. (例えば, プログラム内部で,多量の入力を扱うために, 入力をバッファーにためておき, ある程度入力がたまったときに処理をするようになっていたばあい, Ctrl+Cでは,バッファーにたまっている分は処理されずに終了します.) ちなみに入力の終了は,UNIXでは [Ctrl]+[D] MS-DOSでは [Ctrl]+[Z] [ENTER] です.
補足
Ctrl+Dでした、すいません・・・↓ やはり、スクリプトをつくって実行してくださいの意味が分かりませんでした。 素人ですいません・・・。 教えていただけたら幸いです。
- AYA_papa
- ベストアンサー率0% (0/1)
入力の終端を"END"とすると、 (例1) $ cat > abc.txt << END > テキストの入力 ←1行目テキストを入力 > ・・・ ←n行目テキストを入力 > END ←ENDで,入力終了 (例2) $ cat << END > abc.txt > テキストの入力 ←1行目テキストを入力 > ・・・ ←n行目テキストを入力 > END ←ENDで,入力終了 $ cat abc.txt ←作成されているかを確認 以上のいずれでも出来ると思います。
補足
すいません。書き方が足りなかったですね。 もう一つ疑問に思ったのが $cat >abc.txt >a >b >c とやっていき「Ctrl+C」を押せば任意に終了させることができるのですが、これはbashだけのものであり、共通してのコマンドがヒアドキュメンとなのでしょうか? おそくなりすいません・・・。
- kayu24
- ベストアンサー率0% (0/2)
bashはよくわからないのですが、少なくともcshの場合はこんな使い方ができます。 ::メニュー形式のシェルを作りたい! #!/bin/csh cat << EOF #-------------------------# 1. 10代 2. 20代 3. 30代 #-------------------------# EOF echo -n "年齢は? >" set innum=$< ・ ・ 変数に入力された値で処理を行う ・ ・ つまり、echoを連発しなくてもよい! ついでに、"#"も認識できます。 飽くまでも使い方の一例ですが。
- wolv
- ベストアンサー率37% (376/1001)
利用価値: たとえば、あるテキストファイルを元にして、HTMLファイルを作る スクリプトを作りたい場合、mkhtml.cshとファイルを以下のようにつくり、 ---------- #!/bin/csh -f cat << END_OF_HERE_DOC <html> <head> <title>$1</title> </head> <body> <pre> END_OF_HERE_DOC cat $1 cat <<END_OF_HERE_DOC </pre> </body> </html> END_OF_HERE_DOC ---------- csh mkhtml もとのテキストファイル.txt > result.html のようにすれば、もとのファイルのはじめと終わりに 数行づつ追加されたファイルができます。 ヒアドキュメントがなければ、あらかじめ追加するファイルを作っておき、 cat txt1 $1 txt2 のようにするか、 「1行ずつ echo で表示」する必要があります。
- wolv
- ベストアンサー率37% (376/1001)
bash$ cat << HERE > abc.txt 一行目 2行目 なんでもかける HERE bash$ cat abc.txt 一行目 2行目 なんでもかける bash$ この実行例のようになります。 bash$ cat abc.txt 以下は、実際どのようなファイルができているか確かめているだけです。
お礼
ありがとうございました! 実際に学校では実行することができませんでした…↓ あさってころunix系OSを買ってきて家のに入れるつもりです! そのときはまたよろしくお願いします。