【 shopt 】コマンド(応用編その2)――ディレクトリ名だけでcdコマンドを実行する、ディレクトリ名の入力ミスを補正するLinux基本コマンドTips(363)

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、bashのシェルオプションを設定する「shopt」コマンドです。

» 2019年12月13日 05時00分 公開
[西村めぐみ@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。基礎編応用編(その1)に引き続き、今回は、bashのシェルオプションを設定する「shopt」コマンドについて紹介します。

shoptコマンドとは?

 「shopt」はbashの動作設定(シェルオプション)を表示、設定するコマンドです。

 shoptはbashのビルトインコマンド(内部コマンド、シェルコマンド)です(※1)。「man」コマンドではなく、「help」コマンドや「man bash」で詳細を確認します。

※1 シェルオプションは、「set」コマンド(連載第205回連載第207回連載第208回)で設定できるものと、shoptコマンドで設定できるものに分かれている。shoptはbash 2.0で追加されたコマンド。



 今回は、shoptで設定できるシェルオプションのうち、カレントディレクトリを変更、表示する「cd」コマンド(連載第167回)に関する設定について取り上げます。

 shoptコマンドの基本的な使い方については、連載第361回をご確認ください。



コマンドの書式

shopt [オプション]

※ [ ]は省略可能な引数を示しています。




shoptの主なオプション

短いオプション 意味
-s シェルオプション 指定したシェルオプションを有効(on)にする
-u シェルオプション 指定したシェルオプションを無効(off)にする
-o 「set -o」で指定できるシェルオプションを対象にする
-p シェルオプションの設定状況を、「shopt -s(または-u) オプション」という書式で一覧表示する(※2)
-q メッセージを出力しない(無効なシェルオプションを指定したといったエラーメッセージは出力する)

※2 「shopt -p」の出力結果をファイルに保存しておくと、定義ファイルとして利用できるため、シェルオプションの設定を元に戻す際などに役立つ。



shopt用の主なシェルオプション(cd関連)

シェルオプション 意味
autocd ディレクトリ名のみで「cd」コマンドを実行する(対話シェルのみ、本文を参照
cdable_vars cdコマンドの引数として変数を使用できるようにする(本文を参照
cdspell cdコマンドで指定したディレクトリの軽微なミス(文字の入れ替わり、1文字欠けている、1文字多い)を修正して実行する(対話シェルのみ、本文を参照

shopt用の主なシェルオプション(補完、パス名展開、変数展開関連)※3

シェルオプション 意味
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ではデフォルトで有効。



shopt用の主なシェルオプション(ヒストリー関連)

シェルオプション 意味
cmdhist 複数行に分けて入力したコマンドラインを、1行のヒストリーとして保存する(デフォルトで有効)
lithist cmdhistオプションが有効な場合、複数行に分けて入力したコマンドラインを「;」区切りではなく改行区切りでヒストリーに保存する
histappend シェルの終了時に、シェル変数HISTFILEで指定したファイルにヒストリーのリストを追加する(上書きしない、※6)
histreedit 失敗したヒストリー置換を再編集できるようにする(「!番号」で該当するヒストリーがない場合、コマンドラインに「!番号」を再表示する、※7)
histverify 「!」記号でヒストリーを置換した結果を、すぐに実行するのではなくコマンドラインに表示する

※6 CentOS 7ではデフォルトで有効。
※7 readlineを使用することが前提となる(デフォルトで有効)。



shopt用の主なシェルオプション(互換関連など)

シェルオプション 意味
compat31 条件コマンド「[[」で、「=~」演算子に対するクオートの付いた引き数の扱いをbash 3.1の動作に変更する
compat32 条件コマンド「[[」で、「<」演算子と「>」演算子によるロケール固有の文字列比較の扱いをbash 3.2の動作に変更する
compat40 条件コマンド「[[」で、「<」演算子と「>」演算子によるロケール固有の文字列比較の扱いとコマンドリストの解釈の効果をbash 4.0の動作に変更する
compat41 POSIXモードの際に、ダブルクオートの中のパラメーター展開でシングルクオートを特殊文字として扱う(bash 4.1互換の動作)
gnu_errfmt シェルのエラーメッセージをGNU標準の形式で出力する

shopt用の主なシェルオプション(コマンド終了時、シェル終了時)

シェルオプション 意味
checkjobs 対話シェルが終了する前に、停止中や実行中のジョブの状態を表示する
huponexit 対話ログインシェルを終了する際に、全てのジョブにSIGHUPシグナルを送る(※8)
execfail 「exec」コマンドへの引き数として指定したファイルが実行できなくても、非対話シェルを終了しない(対話シェルがexecに失敗しても終了しない)
checkwinsize コマンドを実行した際に、端末画面の大きさをチェックしてシェル変数LINESとCOLUMNSの値を更新する(※9)

※8 関連記事「Linuxの「シグナル」って何だろう?」を参照。
※9 CentOS 7ではデフォルトで有効。



shopt用の主なシェルオプション(その他)※10

シェルオプション 意味
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コマンド用のシェルオプションが設定できる。





ディレクトリ名を入力するだけでcdコマンドを実行する

 シェルオプション「autocd」を有効にすると、ディレクトリ名を入力するだけで、cdコマンドを実行できます(画面1)。例えば、「/tmp」で「cd /tmp」を、「Desktop」で「cd Desktop」を実行します。autocdは、bashの4.0で追加されたシェルオプションです。

コマンド実行例

shopt -s autocd

(「autocd」を有効にする)

shopt -u autocd

(「autocd」を無効にする)


画面1 画面1 シェルオプション「autocd」を有効にしたところ


ディレクトリ名の入力間違いを補正する

 シェルオプション「cdspell」を有効にすると、cdコマンドで指定したディレクトリ名に軽微なミスがあった場合、それを補正します(画面2)。「軽微なミス」とは、文字が入れ替わっている場合や、1文字の間違い(欠けている、1文字多い)がある場合です。このシェルオプションは、インタラクティブシェルにのみ有効です(※11)。

※11 シェルスクリプトなどを処理するシェルではなく、対話処理を行うシェルをインタラクティブシェルと呼ぶ。



コマンド実行例

shopt -s cdspell

(「cdspell」を有効にする)

shopt -u cdspell

(「cdspell」を無効にする)


画面2 画面2 シェルオプション「cdspell」を有効にしたところ

 なお、ディレクトリ名の補正対象となるのは「cdコマンドの引数」だけです(画面3)。「ls」コマンドなどでは補正されません。

画面3 画面3 lsコマンドでcdspellの効果を確認したところ


[Tab]キー補完を補正する

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。