本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashのシェルオプションを設定する「shopt」コマンドです。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。基礎編、応用編(その1)、応用編(その2)、応用編(その3)に引き続き、今回は、bashのシェルオプションを設定する「shopt」コマンドについて紹介します。
「shopt」はbashの動作設定(シェルオプション)を表示、設定するコマンドです。
shoptはbashのビルトインコマンド(内部コマンド、シェルコマンド)です(※1)。「man」コマンドではなく、「help」コマンドや「man bash」で詳細を確認します。
今回は、shoptで設定できるシェルオプションのうち、「パス名展開で拡張パターン指定を使用する」場合の設定について取り上げます。
shoptコマンドの基本的な使い方については、連載第361回をご確認ください。
shopt [オプション]
※ [ ]は省略可能な引数を示しています。
短いオプション | 意味 |
---|---|
-s シェルオプション | 指定したシェルオプションを有効(on)にする |
-u シェルオプション | 指定したシェルオプションを無効(off)にする |
-o | 「set -o」で指定できるシェルオプションを対象にする |
-p | シェルオプションの設定状況を、「shopt -s(または-u) オプション」という書式で一覧表示する(※2) |
-q | メッセージを出力しない(無効なシェルオプションを指定したといったエラーメッセージは出力する) |
※2 「shopt -p」の出力結果をファイルに保存しておくと、定義ファイルとして利用できるため、シェルオプションの設定を元に戻す際などに役立つ。
シェルオプション | 意味 |
---|---|
autocd | ディレクトリ名のみで「cd」コマンドを実行する(対話シェルのみ) |
cdable_vars | cdコマンドの引数として変数を使用できるようにする |
cdspell | cdコマンドで指定したディレクトリの軽微なミス(文字の入れ替わり、1文字欠けている、1文字多い)を修正して実行する(対話シェルのみ) |
シェルオプション | 意味 |
---|---|
dirspell | 指定したディレクトリが存在しない場合、補完の際にディレクトリ名の訂正を試みる |
force_fignore | 補完の際にシェル変数「FIGNORE」で指定した接尾辞を無視する(デフォルトで有効) |
no_empty_cmd_completion | 空行に対するコマンド補完を行う際に、補完候補をPATHから検索しない(※4) |
failglob | パス名展開でファイル名のマッチに失敗した場合、エラーにする |
nullglob | パス名展開ができなかった場合、空文字列にする |
globstar | パス名展開で「**」を使用可能にする(ディレクトリ下のファイルを再帰的に検索して全てのファイルにマッチする) |
dotglob | 「.」(ドット)で始まるファイル名をパス名展開の結果に含める |
extglob | パス名展開で、「?(パターンリスト)」のように、「?」「*」「+」「@」「!」と「()」を組み合わせたパターン指定(拡張パターンマッチング)を使用する(本文を参照、※5) |
nocaseglob | パス名展開の際に、ファイル名の大文字と小文字を区別しない |
nocasematch | 「case」コマンドや「[[」実行時のパターンマッチで大文字と小文字を区別しない |
progcomp | プログラム補完機能を使用する(デフォルトで有効) |
expand_aliases | エイリアスの展開を行う(デフォルトで有効) |
hostcomplete | 「@」記号でホスト名展開を行う(デフォルトで有効、※4) |
extquote | ダブルクオート中にある「${パラメーター}」の展開で、「$'文字列'」と「$"文字列"」のクオートを機能させる(デフォルトで有効) |
promptvars | プロンプト文字列に対して、パラメーター展開やコマンド置換、算術式展開、クオート削除を行う(デフォルトで有効) |
xpg_echo | 「echo」コマンドで、「-e」オプションがない場合でも、バックスラッシュによるエスケープシーケンスを展開する |
※3 補完については「complete」コマンド(連載第321回)も参照。
※4 readlineを使用することが前提となる(デフォルトで有効)。readlineはコマンドライン編集などで使うライブラリ。
※5 CentOS 7ではデフォルトで有効。
シェルオプション | 意味 |
---|---|
cmdhist | 複数行に分けて入力したコマンドラインを、1行のヒストリーとして保存する(デフォルトで有効) |
lithist | cmdhistオプションが有効な場合、複数行に分けて入力したコマンドラインを「;」区切りではなく改行区切りでヒストリーに保存する |
histappend | シェルの終了時に、シェル変数HISTFILEで指定したファイルにヒストリーのリストを追加する(上書きしない、※6) |
histreedit | 失敗したヒストリー置換を再編集できるようにする(「!番号」で該当するヒストリーがない場合、コマンドラインに「!番号」を再表示する、※7) |
histverify | 「!」記号でヒストリーを置換した結果を、すぐに実行するのではなくコマンドラインに表示する |
※6 CentOS 7ではデフォルトで有効。
※7 readlineを使用することが前提となる(デフォルトで有効)。
シェルオプション | 意味 |
---|---|
compat31 | 条件コマンド「[[」で、「=~」演算子に対するクオートの付いた引き数の扱いをbash 3.1の動作に変更する |
compat32 | 条件コマンド「[[」で、「<」演算子と「>」演算子によるロケール固有の文字列比較の扱いをbash 3.2の動作に変更する |
compat40 | 条件コマンド「[[」で、「<」演算子と「>」演算子によるロケール固有の文字列比較の扱いとコマンドリストの解釈の効果をbash 4.0の動作に変更する |
compat41 | POSIXモードの際に、ダブルクオートの中のパラメーター展開でシングルクオートを特殊文字として扱う(bash 4.1互換の動作) |
gnu_errfmt | シェルのエラーメッセージをGNU標準の形式で出力する |
シェルオプション | 意味 |
---|---|
checkjobs | 対話シェルが終了する前に、停止中や実行中のジョブの状態を表示する |
huponexit | 対話ログインシェルを終了する際に、全てのジョブにSIGHUPシグナルを送る(※8) |
execfail | 「exec」コマンドへの引き数として指定したファイルが実行できなくても、非対話シェルを終了しない(対話シェルがexecに失敗しても終了しない) |
checkwinsize | コマンドを実行した際に、端末画面の大きさをチェックしてシェル変数LINESとCOLUMNSの値を更新する(※9) |
※8 関連記事「Linuxの「シグナル」って何だろう?」を参照。
※9 CentOS 7ではデフォルトで有効。
シェルオプション | 意味 |
---|---|
checkhash | ハッシュテーブル(連載第96回)で見つけたコマンドを実行する前に、コマンドが実際に存在するかどうか確認する |
sourcepath | 「source」コマンド(「.」コマンド)で、指定したファイルをPATHから探す(デフォルトで有効) |
lastpipe | ジョブ制御が有効な場合、バックグラウンドでの実行ではないパイプラインの最後のコマンドを、現在のシェル環境で実行する |
interactive_comments | 「#」以降を無視する(コメント扱いにする、デフォルトで有効) |
shift_verbose | 「shift」コマンドで、シフトの回数が位置パラメーターの数を超えた場合、エラーメッセージを出力する |
mailwarn | メールのファイルがアクセス済みである場合に「The mail in メールファイル名 has been read」というメッセージを表示する |
login_shell | ログインシェルとして起動すると自動設定される(変更不可) |
restricted_shell | シェルを制限モードで起動した場合に自動設定される(変更不可) |
extdebug | デバッガ用の動作を有効にする(具体的な内容については「man bash」を参照) |
※10 この他、「shopt -o」で、setコマンド用のシェルオプションが設定できる。
コマンドラインで複雑なパス名展開を指定したい場合は、シェルオプション「extglob」が役立ちます。
extglobを有効にすると、「記号(パターン|パターン|パターン)」のように、記号とパターンリストを組み合わせた指定が可能になります(画面1、※11)。
※11 extglobはbashバージョン3以前からシェルオプションとして利用できるようになっていた。バージョン4.1以降はデフォルトで有効になった。このため、CentOS 7でもデフォルトで有効だ。
extglobでは、次の記号を使用できます。
Copyright © ITmedia, Inc. All Rights Reserved.