過去問ドリル

LinuCレベル1 GNUとUnixのコマンド 問43

GNUとUnixのコマンド/ストリーム、パイプ、リダイレクトの使用

スクリプト ./build.sh の標準出力を画面に表示しながら、既存のファイル build.log の内容を消さずに、その末尾へ書き足したい。コマンドとして適切なものはどれか。

当サイトのオリジナル問題(LinuCレベル1の出題範囲「GNUとUnixのコマンド」に対応。実際の試験問題ではありません)

正解:B

解説

tee は標準入力を標準出力へ流しつつ、同じ内容を指定したファイルへ書き出すコマンドです。オプションなしではファイルを上書きしますが、-a(--append)を付けるとファイルの末尾に追記します。>> によるリダイレクトも追記になりますが、出力はすべてファイルに向かうため画面には表示されません。標準エラー出力もあわせて記録したい場合は ./build.sh 2>&1 | tee -a build.log のようにします。

選択肢ごとの解説

  • A誤り。オプションなしの tee は指定したファイルを上書きするため、build.log の既存の内容が消えてしまいます。
  • B正しい。tee -a は画面へ出力しながら、ファイルの末尾に追記します。
  • C誤り。>> で追記はできますが、標準出力はすべてファイルに書き込まれるため、画面には何も表示されません。
  • D誤り。tee -i は割り込みシグナル(SIGINT)を無視するオプションで、ファイルは上書きされるため既存の内容が消えます。
LinuCレベル1の問題を演習モードで解く