\r\n\r\n
ターミナルウィンドウでコマンドを実行すると、通常、コマンドの出力はターミナルまたはスクリーンに印刷されるため、すぐに読むことができます。また、コマンドを保存する場合は、出力内容をファイルに出力することもできます。
問題を診断する場合、コマンドの出力をファイルに保存しておくと便利なことがあります。テクニカルサポートのサポートを受けるには、お使いのコンピューターで特定のコマンドを実行し、その結果をサポートチームに送信する必要がある場合があります。コマンドラインから簡単に出力リダイレクトを利用できます。
今日は、Windows、Mac、Linuxのbashshellで、コマンドの出力をテキストファイルに送る方法について説明します。
注:この例ではMacのターミナルを使用しますが、Linuxのbashシェルでもwindows 10の新しいbashシェルと同じように動作します。
コマンドの出力を画面ではなく、ファイルにリダイレクトするための演算子が2つあります。
>記号は、ファイルが存在しない場合は新規に作成し、すでに存在する場合は上書きします。ファイルが存在しない場合は、> >も新規にファイルを作成しますが、ファイルが既に存在する場合は、上書きせずにファイルの末尾にテキストを追加します。
コマンドの出力をファイルにリダイレクトするには、コマンドを入力し、> または > > 演算子を指定し、出力をリダイレクトするファイルへのパスを指定します。たとえば、lsコマンドは、カレントディレクトリのファイルとフォルダーの一覧を表示します。以下のコマンドを実行すると、端末の出力フォルダであるls_output.txt内のファイルに、ファイルやフォルダの一覧が書き込まれます。
path/to/fileを使用するファイルのフルパスに置き換えてください。
ls > /path/to/ファイル
これが今回の例のコマンドです。
ls > /Users/lorikaufman/TerminalOutput/ls_output.txt
ターミナルウィンドウでファイルの内容を見るには、次のコマンドのようにcatコマンドを使用します。ここでも、/path/to/fileを閲覧するファイルのフルパスに置き換えてください。
cat /path/to/file
既存のファイルを使って出力をリダイレクトするたびに、>演算子はそのファイルの内容を置き換えます。複数のコマンドの出力を1つのファイルに保存したい場合は、代わりに> >演算子を使用します。このコマンドの出力は、指定されたファイルの末尾に追加されます(すでに存在する場合)。ファイルが存在しない場合は、新規にファイルを作成します。
例えば、上記で作成したファイルの末尾にシステム情報を追記することにします。そこで、次の行では、uname-aはコマンドの後に、> >リダイレクト演算子をつけています。次に、unameコマンドの出力を追加するファイルのフルパスが来ます。
unameコマンドの-aパラメータは、利用可能なすべてのシステム情報を表示します。
uname -a >> /Users/lorikaufman/TerminalOutput/ls_output.txt
追加情報を含むファイルをターミナルウィンドウで表示するには、次のコマンドを入力し、ファイルへのフルパスを指定します。
cat /Users/lorikaufman/TerminalOutput/ls_output.txt
この作業を必要なだけ繰り返して、コマンド出力をファイルの末尾に追加してください。
ここでは、lsコマンドの出力を、サブディレクトリを再帰的にリストアップしたディレクトリツリー(R引数)、1行に1ファイル(1引数)として送信する別の例を示します。
ls -1R > /Users/lorikaufman/TerminalOutput/dir_tree.txt
そして、前述したように、catコマンドを使って、ターミナルウィンドウでファイルの中身を見るのである。
cat /Users/lorikaufman/TerminalOutput/dir_tree.txt
>および>演算子は、コマンドの出力を画面に表示しません。出力はファイルにのみ送られます。
出力をファイルに送って画面に表示するには、>と>の演算子の代わりに、teeコマンドを使用します。
teeコマンドを使用するには、実行中のコマンド(lsなど)の出力をパイプ演算子(縦棒( | ))を使ってteeコマンドにパイプする必要があります。例えば、次のコマンドは、lsコマンドの出力をteeコマンドに取り込みます。そして、teeコマンドは、画面と、ファイルへのフルパスを使って指定されたファイルに出力を送ります。
ls | tee /Users/lorikaufman/TerminalOutput/ls_output.txt
上記のコマンドは、>演算子と同様に、ファイル内のすべてを置き換えるか、ファイルが存在しない場合は新規に作成します。このファイルの内容をターミナルウィンドウで見るには、以下のcatコマンドを使用します。
cat /Users/lorikaufman/TerminalOutput/ls_output.txt
teeコマンドで出力を画面に表示し、ファイルの末尾に追加するには、次のコマンドを入力します。ここでは、uname-aコマンドを使って、> >演算子と同じように、ファイルの末尾に完全なシステム情報を追加するとともに、画面に出力を送っています。
uname -a | tee -a /Users/lorikaufman/TerminalOutput/ls_output.txt
次のコマンドは、>演算子で行ったように、ディレクトリツリーの再帰的バージョンを1行に1ファイルずつ、ファイルおよびスクリーンティに出力します。
ls -1R | tee /Users/lorikaufman/TerminalOutput/dir_tree.txt
その後、再びcatコマンドでファイルの中身を表示します。
cat /Users/lorikaufman/TerminalOutput/dir_tree.txt
出力(エラーを含む)をファイルにリダイレクトする方法はたくさんあります。出力のリダイレクトに使われるさまざまな演算子やコマンドについては、『Advanced Bash Scripting Guide』の「I/Oリダイレクト」の章で説明されています。
Macユーザーの方は、Macターミナルのコマンドメモフォームもブックマークしておいてください。