bashでの複数行のコマンドのリダイレクト

このQ&Aのポイント
  • Linux上のbashを使用して、複数行のコマンドの結果を一度にリダイレクトする方法について説明します。
  • リダイレクトするコマンドを複数行にわたって記述し、それを一つのファイルに出力する方法を紹介します。
  • ただし、単純にコマンドを記述するだけではなく、解説やコメントも追加することで、可読性の高いスクリプトを作成することができます。
回答を見る
  • ベストアンサー

bashでの複数行のコマンドのリダイレクト

Linux上のbashを使用して、複数行のコマンドの結果を一度にリダイレクトしたいと思います。 思いついた方法が、 #!/bin/bash cat << EOF >> ./test.log cat /etc/fstab cat /etc/inittab cat /etc/modprobe.conf EOF といった方法なのですが、これですとそれぞれのコマンドの結果ではなく、 単に cat /etc/fstab cat /etc/inittab cat /etc/modprobe.conf と言った出力結果がtest.logに出力されてしまいます。 上記のような複数のコマンドの結果を一度にリダイレクトする方法は無いでしょうか? cat /etc/fstab >> ./test.log cat /etc/inittab >> ./test.log cat /etc/modprobe.conf >> ./test.log と言った方法は避けたいと思います(実際には何10行と言うコマンド結果を出力したいので)

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

cat /etc/fstab /etc/inittab /etc/modprobe.conf > ./test.log でいけませんか? また複数行を処理するならかっこで囲んでみるとか・・・ (cat /etc/fstab;cat /etc/inittab;cat /etc/modprobe.conf) > ./test.log

ktrickstar
質問者

お礼

なるほど、そんな方法があったんですね

その他の回答 (1)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

cat -s /etc/fstab \ /etc/inittab \ /etc/modprobe.conf \ > ./test.log でいいんじゃないですか。

関連するQ&A

  • bashでfold整形後のリダイレクトについて

    bashのスクリプトについて質問させてください。 現在、サーバプログラムexecの起動とログ出力を以下のコマンドで実行しております。 exec > server.log しかし、execの出力行の中に、server.logをviで開くことができないような、文字数の多い行が出力されるようになったため 整形してリダイレクトしたいと考えております。そこで exec | fold -w 256 としたところ、exec起動時のログが整形されて正しく標準出力されました。 しかし、これを下記のようにリダイレクトしてファイル出力した場合、起動時のログが尻切れとなり、最後まで出力されませんでした。 exec | fold -w 256 > server.log 起動後にサーバに接続し、以降のサーバーログを出力させると、尻切れから先が出力されはしたのですが、 現在、起動後にserver.logを確認すると最終行の「server startup OK」という文字が確認できない、という状況になっております。 リダイレクトされたファイルにも、標準出力と同期して最終文字まで出力させる方法はございますでしょうか? よろしくお願いいたします。

  • シェルのリダイレクトとパイプについて

    シェルのリダイレクトとパイプについての質問です. リダイレクトでコマンドの標準出力をファイルに指定した後に, パイプを置いて,もう一つコマンドを並べたとき, 後の方のコマンドの標準入力はどうなるのでしょうか? 例えば, ls >outfile |cat ならば, catの標準入力には,何も入ってこないと思うのですが, これを実行すると,lsの結果がoutfileに書き込まれ, 次のプロンプトが表示されます. 普通,catを引数なしで実行すると, EOFが入力されるまで,入力待ちになると思うのですが, こうならないのは,シェルがcatの標準入力にEOFを入力したからだと 考えていいのでしょうか. よろしくお願いします. (質問の意味が分かりにくければご指摘下さい.)

  • Windows 98系OSでのコマンドラインのリダイレクトについて

    Windows 98又はMeのコマンドラインのリダイレクトについて教えてください。 ◎やりたい事 Windows 98又はMeのコマンドラインの実行結果を正常・異常問わずにログ出力する。 ◎ためした事 ・「echo テスト > log.txt 2>&1」を実行 ⇒Windows 98又はMeで同じ事を実行すると'&1'というファイルができてその中身を見ると正常時のログしか出力されていません。また、log.txtは出力されていません。 ・「echo テスト > log.txt」を実行 ⇒実行結果が正常の場合は出力されるのですが異常の場合はコマンド画面に出力されてlog.txtに出力されません。 いろいろ検索したのですが解決に至っておりません。 よろしくお願いします。

  • コマンド結果のリダイレクト

    UNIXコマンドで「sar」がありますが、 その中のオプション「-o」を使用しないで ファイルにリダイレクトをしたいです。 なお、その際にバックグランドで実行しています。 sarコマンドは長時間動かし途中でリダイレクト結果をviewなどで見たいのですがどうしたらよいでしょうか? ex) sar 5 10000 > log.txt & これだと、sarコマンドが終了しないとlog.txtに出力されません。いつでもviewなどで最新のlog.txtを見たいです

  • <Linux>restoreコマンドのリダイレクトについて

    以下の内容でrestoreコマンドによる テープの内容チェックを自動で走らせています。 restore -ivf /dev/nst0 <<EOF >> $LOG ls >> $LOG EOF 以上のシェルの場合、restore -ivf /dev/nst0の結果は $LOGに出力されるのですが、lsの結果が反映されません。 デバックモードで動かしてみてもエラーになっている様子もありませんでした。 restore -ivf /dev/nst0 <<EOF >> $LOG ls EOF 以上で実行するとlsの結果が画面には出力可能です。 この結果を$LOGに出力させるにはどのようにしたらよろしいでしょうか?

  • cronでtopコマンドを使用するスクリプトを実行すると値が取れないの

    cronでtopコマンドを使用するスクリプトを実行すると値が取れないのですが、 なぜなんでしょうか?どうすれば値が取れるようになるのでしょうか? OSはubuntu10.04を使っています。 $./test.shで直接動かすとtopの値は取れるのですが、 cronで動かした場合だとdateの値しか出力されていません。 -----test.sh----- #!/bin/bash FILENM="top.log" cat <<EOF >> ${FILENM} `date` `top -n 1` EOF

  • bashの標準出力のリダイレクトのタイミング

    CentOS上でC言語でプログラムを作成し、printfで計算結果を表示させています。 具体的には一回の試行ごとにprintfで表示させ、それを数百回繰り返すプログラムです。 これをbashの標準出力のリダイレクトを用いてファイルに書き出そうとしているのですが、結果が一回の試行ごとにファイルに書き出されません。数時間待ってみると数回の試行の結果がまとめて書き込まれているので、インターバルがあるのかと考えたのですが、リダイレクトされるタイミングの設定は変更可能ですか? 入力したコマンドは hogehoge > fuga.csv & です。

  • bashで変数を含んだファイル読み込み

    お世話になります。 外部読み込みファイルの中に変数やコマンドをセットして利用したいのですが、それはできないのでしょうか? ----test.txt messages-${testdate} `hostname`.log -------------------------- ----test.sh testdate=`date +%Y%m%d` for line in `cat test.txt` do echo $line done -------------------------- ----出力 messages-${testdate} `hostname`.log -------------------------- ----望む出力結果 messages-20150521 servername.log -------------------------- 方法がございましたら、ご教授お願い致します。

  • bash forコマンドでソート

    bash forコマンドでソート CentOS8 bashの forコマンドで、ディレクトリ内のファイル名を部分指定した降順でソートした状態で順次読み込みしたいです。 <ファイル> aaa.dat bbbb_0001.dat TEST_0001.file TEST_0002.file TEST_0003.file <アウトプット> TEST_0003.file TEST_0002.file TEST_0001.file 基本的な読込と、lsコマンドの結果を基に読み込む方法はわかりましたが、これに降順ソートを加えるにはどうすれば良いでしょうか? <基本的な読込> for file in /dir1/TEST_*.file do echo $file done <lsコマンドの結果を基に読込> for file in $(ls /dir1/TEST_*.file) do echo $file done

  • BCPコマンドのリダイレクト値が空になる

    BCPコマンドのリダイレクト値が空になる 現在、VB.NET2005で開発を行っております。 バッチファイルにて、SQLServerExpressからCSVを作成しているのですが、 リダイレクトの出力結果をログファイルに出力する際 結果が空になる場合があるのです。 SQLExpressを止める等、強制的にエラーを起こしてみたりしたのですが その場合は接続エラーがでますし、正常の場合は「コピーを開始中です...以下略」 と何かしらのメッセージが出力されます。 ログが空になるというのはどういう場合が考えられるのでしょうか。 お分かりの方がおられましたらお力をお貸しください。 お願いします。 バッチの中身は ****************************** BCP "SELECT * FROM TABLE" queryout D:\AAA.csv -c -t , -r \n -S localhost\SQLEXPRESS -U XXX -P XXX > D:\AAA.log ****************************** こんな感じです。