WSL設定ガイドでは、WSL利用の一環として、Linuxのシェルbashの基本的な設定に関しても解説を行っている。今回は、bashの起動オプションについて解説を行う。表01にコマンドライン関連の用語を示す。
起動オプションとは?
一般にコンソール内で実行されるコマンドは、コマンドラインと呼ばれ、コマンド名に続けて引数をならべることでコマンドの動作や処理対象を指定する。これを「起動オプション」ということがある。
引数は、オプションとパラメータを区切り文字(半角スペース)で区切って記述したもの。オプションは、コマンドの動作を指定するもの、パラメータは処理対象を指定する。なお、一部のオプションはパラメータを伴うものがある。
オプションは、原則オプション指定文字から始まる。オプション形式には大きく2つあり、1つは、Unix時代からの標準である「POSIX形式」である。もう1つは、1992年に発行されたGNU Coding Standardsで定義された「GNU形式」がある。GNU形式は、POSIX形式を含み、さらに「長い名前」と呼ばれるオプション表記を追加している。
実際には、引数の形式はコマンドプログラムが自由に定義できるため、上記の2形式から外れた引数形式を使うコマンドもある。正確には、コマンドの引数形式を決めているのは、コマンドプログラムが開発時に利用したコマンドライン解析ライブラリである。
初期Unixで開発されたコマンドは、オプション指定文字を使わないものがあるが、Linuxなどに移植される際にPOSIX形式やGNU形式に対応が行われている。ただし、旧来との互換性のため、古い引数形式が残っているコマンドも少なくない(例:tarコマンドなど)。
POSIX形式は、オプション指定文字“-”に続けて、1つだけの英数字を指定する。このときアルファベットは、大文字と小文字が区別され、それぞれが別の意味を持つ場合がある。
また、POSIX形式の慣例として、オプションが連続する場合、区切り文字(スペース)と2つ目以降のオプション指定文字を省略できるというルールがある。たとえは、「-x␣-y␣-z」ならば「-xyz」と短縮表記できる。
GNU形式は、POSIX形式を含み、さらに「長い名前」のオプションを追加定義している。長い名前は、英単語などを使い、オプション指定文字に“--”を使う。
bashの起動オプション
bashのコマンドライン書式は、
bash [長いオプション] [短いオプション] [スクリプトファイル] [パラメータ]
になっている。もしすべてのオプションを処理したあと引数が残っていなければ、bashは標準入力からコマンドを読み込む。これがbashがシェル動作している状態である。
表02は、bashの起動オプションの一覧である。なお、bashのオプションには、bash組み込みコマンドのsetの起動オプションを直接指定することもできる。また、「-O/+O」オプションを使って、shopt組み込みコマンドで扱う「シェルオプション」を指定することができる。これについては表03にキーワードを示す。シェルオプションに関しては、回を改めて別途解説を行う予定である。
また、set起動オプションには、キーワードを使って動作を指定する「-o」オプションがある。こちらについても表04にキーワードを示す。
bashの起動オプションは、多数あり、筆者は、これを8種に分類した。「コマンドライン」は、bashの起動オプションのうち、コマンドラインの利用に関わるもの。「動作」は、bashの動作、振る舞いを変更するものである。
「モード」は、bashの動作モードを指定するもの。bashには、「interactive(対話)」、「debugger(デバッグ)」、「login shell(ログインシェル)」、「Monitor(モニター)」、「privileged(特権)」、「posix(ポジックス)」、「restricted(制限)」の7つの動作モードがある。
「デバッグ」は、スクリプトなどのデバッグ作業で利用するオプションであるが、必ずしも「デバッグモード」(--debuggerオプション)が必要なわけではない。
「エラー」は、エラー処理の振る舞いを変更するもの。「初期化ファイル」は、~/.bashrcなどの初期化ファイルの読み込みを制御するものだ。
そのほか、オンラインヘルプやバージョン表示などの「汎用」カテゴリ、「その他」には、キーワードで、bashのオプションを指定できるオプションがある。
オプションの使い分け
オプションには、POSIX形式、GNU形式があり、さらにbashのオプションには、通常形式以外にsetコマンド由来の「-o」オプションがある。
日常的な利用では、短いPOSIX形式オプションの利用が打鍵数を減らせて有利である。また、GNU形式では、“--”に続けてオプションの先頭文字を入れれば、コマンドライン補完で候補を表示できる。これによりうろ覚えのオプションの指定が容易というメリットがある。
しかし、コマンドラインに関連する文書での表記などでは、GNU形式や「-o キーワード」表記の方が対象がはっきりして解りやすい。また、パラメーター付きオプションでは、可能ならGNU形式を使い「オプション=パラメータ」という表記を使った方が、単独パラメーターを区別しやすい。コンピュータ側は、パラメーター付きオプションと、単独オプションを厳密に区別できるが、人間は、表示に惑わされやすい。社内ドキュメントなどの場合には、起動オプションなどは、冗長な表現をした方がいいだろう。
≫ Windows Subsystem for Linuxガイド 連載バックナンバー
https://news.mynavi.jp/tag/winsubsystem/