【bash】複数のコマンドの結果をパイプで次のコマンドに渡したい
問題
複数のコマンドの実行結果を、次のコマンドに渡したいです。
答え
例えば、echo、date、df のコマンドを組み合わせて、「ある時刻のディスク使用状況」を出力させられるが、これをmailコマンドに渡してメールさせてみる。
(~) でサブシェルに一式実行してもらって、結果をパイプでmail に渡す。
$ ( echo "Disk space usage report" ; date ; df ) | mail -s "report from 192.168.1.101" test@example.com
{~} を使う手もある。サブシェル起動ではなくて、複数コマンドをまとめてリダイレクトする機能。
$ { echo "Disk space usage report" ; date ; df ; } | mail -s "report from 192.168.1.101" test@example.com
※ {~} は、{ や } の前後にスペースを入れておいた方が無難だったり、最後の ; も入れておいた方がよかったりするようです。
コメント