IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

WSLで始めるUbuntu

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第41回 bashの組み込みコマンドついて知ろう(9) (宮崎悟) 2022年4月

今回も前回と同じく、bashの組み込みコマンドについて説明します。

set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]

オプションがない場合、現在設定されているシェル変数の名前と値が表示されます。シェル変数を、設定またはリセットするための入力として、再利用できる形式になっています。読み取り専用の変数はリセットできません。 posix モードでは、シェル変数のみがリストアップされます。 出力は現在のロケールにしたがってソートされます。 オプションが指定されると、実行中のシェルの属性を設定したり解除したりします。 オプション処理後に残った引数は、位置パラメーターの値として扱われ、順に $1, $2, ... $n へ代入されます。

  • -a オプション 作成または修正された各変数や関数に、export属性が与えられます。

  • -b 終了したバックグラウンドジョブの状態を、次のプライマリプロンプトの前ではなく、即座に報告するよう変更します。 これは、ジョブ制御が有効な場合のみ使用できます。

  • -B シェルはブレース展開を行います。これはデフォルトで有効です。

  • -C 設定されている場合、 bash はリダイレクト演算子 >, >&, <, > で既存のファイルを上書きしません。 上書きができるのは、リダイレクト演算子>|> の代わりに使ったときのみです。

  • -e パイプライン(単一の単純なコマンドで構成されているものも含む)、リスト、ブレースで囲まれた複合コマンドが、0以外のステータスで終了した場合、直ちに終了します。 失敗したコマンドが以下の場合は、シェルを終了しません。

    • while または until キーワードの直後のコマンドリストの一部
    • if または elif 予約語に続くテストの一部
    • && または || によるコマンドのリストの一部である場合 (最後の && や || の後のコマンドを除く)
    • 最後のパイプライン以外のコマンド
    • コマンドの戻り値が ! で反転される場合
    • サブシェル以外の複合コマンドが、-e を無視している間にコマンドが失敗したために 0 以外の状態を返した場合

    ERR のトラップが設定されている場合、シェルが終了する前に実行されます。

    このオプションは、シェル環境と各サブシェル環境に別々に適用され、サブシェル内のすべてのコマンドを実行する前にサブシェルが終了する場合もあります。

  • -E ERR のトラップは、 シェル関数、コマンド置換、サブシェル環境で実行されるコマンドに継承します。 通常、このような場面では、 ERR のトラップは継承されません。

  • -f パス名展開を無効にします。

  • -h コマンドを実行するためにコマンドを検索する際、コマンドの場所を記憶します。 これはデフォルトで有効になっています。

  • -H ! 形式の履歴置換を有効にします。 このオプションは、シェルが対話的なときにはデフォルトで有効です。

  • -k コマンド名の前にあるものだけでなく、代入文の形をしたすべての引数が、そのコマンドに対する環境変数に追加されます。

  • -m モニターモードです。 ジョブ制御が有効です。このオプションは、それをサポートするシステム上の対話型シェルではデフォルトでオンになっています 。 すべてのプロセスは、別々のプロセスグループで実行されます。 バックグラウンドジョブが完了すると、シェルはその終了ステータスを含む行を表示します。

  • -n コマンドを読み込むが、実行はしません。 これは、シェルスクリプトの構文エラーをチェックするために使用されます。 対話型シェルでは無視されます。

  • -o option-name option-name には、以下のいずれかを指定できます。

  • allexport -a と同じです。

  • braceexpand -B と同じです。

  • emacs emacs 形式のコマンド行編集インタフェースを使います。 これはシェルが対話的な場合には、デフォルトで有効です。 ただし、 --noediting オプション付きでシェルを実行した場合は除きます。 これは、read -e での編集インタフェースにも影響します。

  • errexit -e と同じです。

  • errtrace -E と同じです。

  • functrace -T と同じです。

  • hashall -h と同じです。

  • histexpand -H と同じです。

  • history コマンド履歴を有効にします。 このオプションは、対話的シェルではデフォルトで有効です。

  • ignoreeof シェル変数で、IGNOREEOF=10 を設定した場合と同じ効果を持ちます。

  • keyword -k と同じです。

  • monitor -m と同じです。

  • noclobber -C と同じです。

  • noexec -n と同じです。

  • noglob -f と同じです。

  • nolog 現在は無視されます。

  • notify -b と同じです。

  • nounset -u と同じです。

  • onecmd -t と同じです。

  • physical -P と同じです。

  • pipefail 設定されている場合、パイプラインの返り値は、 0 以外のステータスで終了した最後の (一番右の) コマンドの値になります。 パイプラインの全てのコマンドが成功の状態で終了すると 0 になります。 このオプションは、デフォルトで無効です。

  • posix bash の動作のうち、デフォルトの振舞いが POSIX 標準と異なる部分を、POSIX 標準に準拠するように変更します (posix モード)。

  • privileged -p と同じです。

  • verbose -v と同じです。

  • vi vi 形式のコマンド行編集インタフェースを使います。 これは、read -e での編集インタフェースにも影響します。

  • xtrace x と同じです。

option-name なしで -o オプションを指定した場合、現在のオプションが出力されます。 option-name なしで +o オプションを与えた場合、現在のオプション設定を再生成する setコマンドの列が標準出力に出力されます。

  • -p 特権 (privileged) モードを有効にします。 このモードでは $ENV と $BASH_ENV ファイルは処理されません。シェル関数は環境から継承されず、 SHELLOPTS, BASHOPTS, CDPATH, GLOBIGNORE 環境変数は定義されていても無視されます。 実ユーザ (グループ) ID と異なる実効ユーザ (グループ) ID でシェルが起動され、 かつ -p オプションが与えられていない場合、 これらの動作が行われ、実効ユーザ ID には実ユーザ ID が設定されます。 起動時に -p オプションが与えられた場合、 実効ユーザ ID は再設定されません。このオプションを無効にすると、 実効ユーザ ID と実効グループ ID には、 実ユーザ ID と 実グループ ID が設定されます。

  • -P 設定されている場合、 cd のような現在の作業ディレクトリを変更するコマンドを実行するときに、 シェルはシンボリックリンクをたどりません。 代わりに物理的ディレクトリ構造が使われます。 デフォルトでは、 bash がカレントディレクトリを変更するコマンドを実行する際には、 ディレクトリの論理的な接続をたどります。

  • -t コマンドを 1 つ読み込み、実行してから終了します。

  • -T 設定されている場合、DEBUG と RETURN のトラップは、 シェル関数、コマンド置換、サブシェル環境で実行されるコマンド、に継承されます。 通常、このような場面では DEBUGと RETURN のトラップは継承されません。

  • -u パラメータ展開の実行中に、特殊パラメータ "@" と "*" 以外で 設定されていない変数やパラメータをエラーとして扱います。 設定されていない変数やパラメータを展開しようとした場合、 シェルはエラーメッセージを出力します。 シェルが対話的でなければ、0 でないステータスで終了します。

  • -v シェルの入力行を、読み込んだ際に表示します。

  • -x 単純なコマンド、for コマンド、case コマンド、 select コマンド、算術 for コマンドをそれぞれ展開した後、プロンプト PS4 を展開した値を表示します。その後に、そのコマンドと展開した引き数や、 結び付いた単語のリストを表示します。

  • --(ハイフン2つ) このオプションの後に引き数が続いていない場合には、位置パラメータの設定が取り消されます。引き数が続いている場合には、位置パラメータに arg が設定されます。 argに - で始まるものが含まれていても、 オプションではなく位置パラメータとして扱われます。

  • -(ハイフン1つ) オプションの終わりを示します。残りの arg は全て位置パラメータに代入されます。 -x オプションと -v オプション指定時には、無効になります。 arg がない場合には、位置パラメータの内容は変化しません。

特に断りのない限り、オプションはデフォルトでオフになっています。 - の代わりに + を使用すると、これらのオプションはオフになります。 オプションは、シェルを起動する際の引数としても指定できます。 現在のオプションのセットは、$-で見つけることができる。 無効なオプションに遭遇しない限り、setコマンドは常に真を返します。

終わりに

今回は、組み込みコマンド set について説明しました。次回も、bashの組み込みコマンドについて説明を続けます。次回をお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes