基本情報技術者 2012年 春期 午前(科目A) 問24
問題文
シェルのリダイレクト機能による実現の可否に関する記述のうち、適切なものはどれか。
選択肢
ア:標準出力をファイルに切り替えることはできないが、標準入力をファイルに切り替えることはできる。
イ:標準出力をファイルに追加することはできないが、標準入力と標準出力をファイルに切り替えることはできる。
ウ:標準入力と標準出力をファイルに切り替えることができ、標準出力をファイルに追加することもできる。(正解)
エ:標準入力をファイルに切り替えることはできないが、標準出力をファイルに切り替えることはできる。
🔒 解説は解答すると表示されます
シェルのリダイレクト【午前解説】
正解の理由
正解は ウ です。
シェル(Bourne系やPOSIX準拠シェル)では次が可能です。
シェル(Bourne系やPOSIX準拠シェル)では次が可能です。
- 標準入力をファイルに切り替える:
command < input.txt - 標準出力をファイルに切り替える(上書き):
command > output.txt - 標準出力をファイルに追加(追記):
command >> output.txt
これらはシェルの基本機能であり、選択肢ウの「標準入力と標準出力をファイルに切り替えることができ、標準出力をファイルに追加することもできる」が正しい記述です。
解法ステップ
- 問題文で扱う対象が「標準入力」「標準出力」「標準出力の追加(追記)」であることを確認する。
- シェルのリダイレクト演算子を頭の中で列挙する:
<,>,>>,2>,2>&1など。 - 各選択肢が演算子で実現可能かを当てはめて検証する。
- 可能なら具体例コマンドを思い浮かべて、動作が期待通りになるか確認して正解を決める。
実際例:
# 標準入力をファイルから読み取る
sort < unsorted.txt
# 標準出力をファイルに上書き
echo hello > out.txt
# 標準出力をファイルに追記
echo more >> out.txt
選択肢別の誤答解説
- ア: 「標準出力をファイルに切り替えることはできないが、標準入力をファイルに切り替えることはできる。」
→ 誤り。標準出力は>で容易にファイルに切り替えられます。 - イ: 「標準出力をファイルに追加することはできないが、標準入力と標準出力をファイルに切り替えることはできる。」
→ 誤り。標準出力の追加は>>で可能です。 - ウ: 「標準入力と標準出力をファイルに切り替えることができ、標準出力をファイルに追加することもできる。」
→ 正しい。上記の通り<,>,>>で実現可能です。 - エ: 「標準入力をファイルに切り替えることはできないが、標準出力をファイルに切り替えることはできる。」
→ 誤り。標準入力も<で切り替え可能です。
よくある誤解
- 「追記はできない」と誤解する点:
>>を忘れて>しか知らないと追記できないと思い込んでしまいます。 - 「標準入力の切替が対話的に常に無効」との誤解: 対話的なプログラムは端末依存の動作をしますが、シェル自体は
<で入力をファイルに切り替えられます。 - 「標準エラーも自動で同じファイルに入る」と思う誤り:
2>や2>&1を使わないと stderr は別扱いのままです。
補足コラム
- 標準エラー(stderr)はファイルディスクリプタで、通常は
2>や2>&1で制御します。例えば標準出力と標準エラーを同じファイルにまとめるにはcommand > all.log 2>&1またはcommand &> all.log(シェルによる)を使います。 teeコマンドを使うと標準出力をファイルに書きつつ画面表示もできます:command | tee file.txt。追記はtee -a。- ヒアドキュメント(here document)やヒアストリングも入力リダイレクトの派生で、複数行の入力をコマンドに渡す際に有用です。
FAQ
Q1: 標準エラーも追記できますか?
A1: はい。例えば
A1: はい。例えば
command 2>> error.log で stderr を追記できます。標準出力と標準エラーを同じファイルに追記したい場合は command >> all.log 2>&1 とします。Q2:
A2:
> と >> の違いは何ですか?A2:
> はファイルが存在すると上書きして内容を消去します。>> は既存ファイルの末尾に追記します。存在しない場合はどちらもファイルを新規作成します。Q3: 対話型プログラムに
A3: 多くの対話型プログラムは端末からの制御シーケンスを期待するため、期待通り動作しない場合がありますが、プログラムが標準入力から読み取るだけなら
< でファイルを渡すとどうなりますか?A3: 多くの対話型プログラムは端末からの制御シーケンスを期待するため、期待通り動作しない場合がありますが、プログラムが標準入力から読み取るだけなら
< でファイルから入力可能です。関連キーワード: シェル, リダイレクト, 標準入力, 標準出力, 標準エラー, ファイルディスクリプタ, パイプ, tee

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

