】コマンド(応用編2)——定義されていない変数の扱いやコマンドのエラーへの対応を変更する本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、シェルの設定を確認、変更する「set」コマンドです。本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回はシェルの設定を確認、変更する「set」コマンドです。定義されていない変数を参照したらエラーとするコマンドがエラーとなったら直ちにシェルを終了するsetコマンドとは?「set」はシェルの設定を確認、変更するコマンドです。setはbashのビルトインコマンド(シェルの組み込みコマンド)です(※1)。このためmanコマンドではなく、helpコマンドで詳細を表示できます。setコマンドの基本的な使い方については、連載第205回をご確認ください。tcshなど、他のシェルにも同名のコマンドがある。今回はsetコマンドのオプションのうち、よく使われる2つを取り上げます。定義されていない変数を参照したらエラーとする「nounset」オプションと、コマンドが実行時にエラーになった場合、直ちにシェルを終了する「errexit」オプションです。リダイレクトで既存のファイルを上書きしない「noclobber」オプションと、[CTRL]+[D]でログアウトしない「ignoreeof」オプション、終了したバックグラウンドジョブの結果をすぐに表示する「notify」オプションについては、第207回をご覧ください。]は省略可能な引数を示しています。allexport」と同じ効果を持つ。allexport」相当だ。他のシェルオプションについても同様。トレース情報として、シェルが実行したコマンドとその引数を出力する。シェルスクリプトの文法チェックをする際に使用する。対話シェルでは無視する。目次に戻る定義されていない変数を参照したらエラーとするコマンドラインやシェルスクリプトから変数を参照したとき、その変数が定義されていない場合は「値なし」になります。$testvar」を実行したときに、変数$testvarが定義されていなければ、何も表示しません(画面1)。ここでsetコマンドのオプションを使うと、定義されていない変数を参照した際、エラーとなるように設定できます。-u」で、setコマンドの「nounset」オプションを有効にします。定義されていない変数を参照したときのシェルの挙動を変えたところ画面1でも分かるように、nounsetオプションが無効の場合、定義されていない変数を参照してもエラーにはなりません(エラーコードが0になる)。従って、変数の値がないのか、変数そのものが定義されていないのか、区別がつきません(画面2)。変数の値がないのか、変数そのものが定義されていないのか区別ができないシェルスクリプト内から、ある変数が定義されているかどうか調べる方法は大きく3つあります。〜」のように調べる方法です(※5)。-u」のようにbashを-uオプション付きで指定する方法です。変数名」)と同じ意味。ここでは変数名が定義されているかどうかを調べている。目次に戻るコマンドがエラーとなったら直ちにシェルを終了するコマンドラインで実行したコマンドがエラーとなっても、通常、シェルは終了しません。そのまま次のコマンドを待ちます。コマンドラインではこのような動作でも問題ありませんが、シェルスクリプトの場合はエラーが起きた時点で終了させたい場合があります。-e」でsetコマンドのerrexitオプションを有効にします。-eを使う対応は、スクリプトを改善し、テストする段階などに留めておくべきです。何度も使うシェルスクリプトでは、エラー処理を書いておきましょう。errexit相当)(画面4)画面3では、シェルの動作を試すために、suコマンド(第67回)でいったん別のユーザー(penguin)に変わり、lsコマンドで存在しないファイルを表示しています。lsコマンドはエラーになりますが、シェルは実行を続けています。これに対し、errexitオプションを有効にした状態で同じようにlsコマンドを実行すると、エラーとなった時点でシェルが終了し、元のユーザーに戻っている様子が分かります(画面4)。ご自身の環境で試す場合、新しい端末画面を開いてそこで実行すれば、suコマンドを使わなくても構いません。-e」を実行した後、lsコマンドを同様に実行してエラーになると、端末画面が閉じます。bashが終了する様子が分かるでしょう。画面4と動作を比較しよう。めぐみ)PC-9801NからのDOSユーザー。toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。Reserved.ページトップに戻る。