連載
» 2019年12月12日 05時00分 公開

Linux基本コマンドTips(362):【 shopt 】コマンド(応用編その1)――コマンドライン履歴の扱い方を変更する

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

[西村めぐみ,@IT]

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

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

Linux基本コマンドTips一覧

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

shoptコマンドとは?

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

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

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



 今回は、shoptで設定できるシェルオプションのうち、コマンドライン入力の履歴(ヒストリー)に関する設定について取り上げます。

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



コマンドの書式

shopt [オプション]

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




shoptの主なオプション

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

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



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

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

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 「!」記号でヒストリーを置換した結果を、すぐに実行するのではなくコマンドラインに表示する(本文を参照、※7)

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





コマンドラインのヒストリーを参照/実行する

 bashではコマンドラインのヒストリーを「!番号」で参照して、そのまま実行できます(画面1)。例えば、コマンドラインで「!番号」あるいは「!!」(直前のコマンドという意味)と入力して[Enter]キーを押すと、即座にコマンドを実行します。

 シェルオプション「histverify」を有効にすると、「!」記号で参照した内容をいったんコマンドラインに表示します。ここで実行前に内容を確認できることはもちろん、実行前に修正できます。

コマンド実行例

shopt -s histverify

(「histverify」を有効にする)

shopt -u histverify

(「histverify」を無効にする)


画面1 画面1 コマンドラインのヒストリーを参照、実行したところ


複数行にわたるコマンドラインを記録する

Copyright © ITmedia, Inc. All Rights Reserved.

編集部からのお知らせ

RSSについて

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

メールマガジン登録

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