第306問ログインシェルとしてbashが起動した際、最初に読み込まれる設定ファイルはどれか。
- A~/.bash_profile
- B/etc/profile
- C~/.bashrc
- D~/.profile
作業を自動化するための仕組みを扱う、出題数が最多の分野です。シェルでは環境変数とシェル変数の違い、設定ファイルの読み込み順序、エイリアスと関数、コマンド履歴の活用が基礎になります。スクリプトでは変数の扱い、条件分岐と繰り返し、コマンドの終了ステータスによる判定、引数の受け取り、関数の定義が中心テーマです。実務での自動化に直結する領域であり、手を動かして書いてみることで理解が深まります。
この分野の問題70問を、選択肢・正解・解説つきで掲載しています。まず自分で解答を考えてから「正解と解説を見る」を開いて答え合わせをしてください。
クイズモードで挑戦 →正解:C.~/.bash_profile
/etc/profileの次に、~/.bash_profile、~/.bash_login、~/.profileの順で存在確認され、最初に見つかったものが一度だけ読み込まれる。
この問題の解説ページを開く →正解:B./etc/profile内に/etc/bash.bashrcを読み込む記述を追加する
/etc/bash.bashrcはデフォルトでは非ログインシェルでのみ読み込まれるため、ログイン時にも実行したい場合は/etc/profile等から呼び出す。
この問題の解説ページを開く →正解:D.bashのソースコード中のマクロ定義が無効にされてコンパイルされているため
bashのコンパイル時にマクロ定義「#define SYS_BASHRC /etc/bash.bashrc」を無効にしているディストリビューションでは使用できない。
この問題の解説ページを開く →正解:A.function myfunc() { echo Hello; }
bashで関数を定義するには「function 関数名() { コマンド; }」の構文を用いる。
この問題の解説ページを開く →正解:C.現在のシェルの内部で実行され、子プロセスは生成されない
組み込みコマンドfunctionで定義された関数はシェル内部で実行され、シェルスクリプトのように子プロセスを生成しない。
この問題の解説ページを開く →正解:C.alias ls='ls -la'
引用符で囲まないとスペース以降が別のエイリアス指定として扱われ、オプション込みの別名にならない。オプションを含む場合はシングルクォート「' '」で囲む。
この問題の解説ページを開く →正解:D.読み込み権と実行権
バイナリと異なり、シェルスクリプトを直接実行するにはインタプリタが中身を読むための読み込み権と、プログラムとして起動するための実行権の両方が必要。
この問題の解説ページを開く →正解:D.コメントとして無視される
シェルの引数として実行された場合、実行しているのはそのシェル自身であるため、スクリプト内の「#」で始まる行は単なるコメントとして無視される。
この問題の解説ページを開く →正解:C.if コマンド1; then コマンド2; fi
if文は「if コマンド; then 処理; fi」の構文をとり、直後のコマンドの終了値が0であればthen以降を実行する。
この問題の解説ページを開く →正解:D.testコマンド
「[」は単なる括弧ではなくtestコマンドと同等の条件判定コマンドである。bashでは組み込みコマンドとして提供されるほか、/usr/bin/[ や/usr/bin/testとして実体ファイルも存在する。
この問題の解説ページを開く →正解:A.[ 整数1 -eq 整数2 ]
-eqは整数値として比較するため「[ 05 -eq 5 ]」は真になるが、=や==は文字列比較のため「[ 05 = 5 ]」は偽になる。
この問題の解説ページを開く →正解:B.カレントディレクトリ下にあるファイル名やディレクトリ名に展開される
「*」はパス名展開(ワイルドカード)として働き、カレントディレクトリのファイル名に置き換わる。
この問題の解説ページを開く →正解:B.カレントディレクトリ内のファイル名とディレクトリ名が順番に表示される
inの後の「*」はファイル名に展開されるため、ディレクトリ内のすべてのファイル・ディレクトリ名がループ処理される。
この問題の解説ページを開く →正解:A.コマンド実行した現在のシェル内のみ(設定ファイルに書かない限り)
コマンドラインでaliasコマンドを実行しただけでは一時的な設定であり、恒久的に使うには~/.bashrc等の設定ファイルへの追記が必要である。
この問題の解説ページを開く →