| 日本−日本語 |
|
|
|
![]() |
HP-UX リファレンス: セクション 1 : ユーザーコマンド (A~M) > kksh(1)HP-UX 11i Version 2: September 2004 |
|
名称ksh, rksh ― シェル、標準または制限付きコマンドプログラミング言語 構文ksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ... [+o option] ... [-c string] [arg ...] rksh [-aefhikmnoprstuvx] [+aefhikmnoprstuvx] [-o option] ... [+o option] ... [-c string] [arg ...] 説明ksh は、ターミナルまたはファイルから読み取ったコマンドを実行するコマンドプログラミング言語です。 rksh は、コマンドインタプリタ ksh の制限付きバージョンで、 標準シェルより機能を制限した実行環境を持つログ名の設定に使用されます。 コマンド行オプションと引き数の詳細については、 後述の「ksh の実行」と「特殊コマンド」の項 (特に set コマンドの説明) を参照してください。 定義
コマンド単純コマンド\c は、空白で区切られたワードのシーケンスで、 その前にパラメータ割り当てリストを指定できます (後述の「環境」の項を参照)。 最初のワードは、実行するコマンドの名称を指定します。 残りのワードは、下記に示された要素を除いて、 実行するコマンドに引き数として渡されます。 コマンド名は 0 番目の引き数として渡されます (exec(2) を参照)。単純コマンドの値 は、コマンドが正常終了した場合には終了ステータス、 異常終了した場合には (8 進数の) 200+ステータス となります (ステータス値のリストについては signal(5) を参照)。 パイプライン は、 | で区切られた 1 つ以上の コマンド のシーケンスです。 最後のコマンドを除く各コマンドの標準出力は、パイプ ( pipe(2) を参照) によって次のコマンドの標準入力に連結されます。 各コマンドは別個のプロセスとして実行され、 シェルは最後のコマンドの終了を待ちます。 パイプラインの終了ステータスは、 パイプラインの最後のコマンドの終了ステータスです。 リスト は、 ;, &, &&, または || で区切られ、オプションの ;, &, または |& で終わる 1 つ以上のパイプラインのシーケンスです。 これらの 5 つの記号のうち、 ;, &, および |& の優先順位は同じです。 && および || の優先順位は同じであり、他のものより上位になります。 記号 セミコロン (;) は、前のパイプラインを逐次実行します。アンパサンド (&) は、その前のパイプラインを非同期的に実行します (つまり、シェルはこのパイプラインの実行の終了を待ちません)。 記号 |& は、親シェルに対して双方向のパイプを設定した形でその前のコマンドまたはパイプラインを非同期的に実行します (コプロセス\c と呼びます)。 親シェルは、 生成したコマンドの標準入力への書き込みや標準出力からの読み取りを、 後述の特殊コマンド read と print の -p オプションを用いて実行することができます。 記号 && (||) は、前のパイプラインが戻した値がゼロ (ゼロ以外) の場合にのみ、 その後の リスト を実行します。 リスト の中には、 コマンドの区切りとして、 任意の数の改行をセミコロンの代わりに指定することができます。 コマンド は、 単純コマンドであるか、または以下のいずれかです。 特に説明がない限り、コマンドが戻す値は、そのコマンドの中で最後に実行された単純コマンドが戻す値になります。
以下に示すキーワードが認識されるのは、コマンドの最初のワードで、 かつ引用符で囲まれていない場合に限られます。 if then else elif fi case esac for while エイリアス化各コマンドの最初のワードは、そのワードにエイリアス\c が定義されていると、そのエイリアスのテキストに置き換えられます。エイリアス名は任意の個数の文字から構成され、メタキャラクタ、引用符となる文字、ファイル拡張子文字、パラメータ置換文字とコマンド置換文字、および = を除く文字が使用できます。 置換文字列には、上記のメタキャラクタを含む任意の有効なシェルに渡すことが可能な文字を含めることができます。 置換されたテキスト中の各コマンドの最初のワードは、置き換え処理中のもの以外については、さらに他のエイリアスかどうかテストされます。 エイリアスの値の最後の文字が空白\c の場合には、 そのエイリアスの後のワードについても、エイリアスの置換を行うかどうかチェックされます。 エイリアスは特殊な組み込みコマンドの再定義に使用できますが、上記のキーワードの再定義には使用できません。 エイリアスの作成、リスト、エクスポートは alias コマンドを用いて実行可能で、エイリアスの削除は unalias コマンドで実行できます。 エクスポートされたエイリアスはサブシェルでも有効ですが、シェルを実行するたびに別々に初期化し直す必要があります (後述の「ksh の実行」の項を参照)。 エイリアス化\c は、スクリプトが実行されている間にではなく、読み取られる際に行われます。 したがって、エイリアスを実際に有効とするには、そのエイリアスを参照しているコマンドが読み取られる前に alias コマンドが実行されなければなりません。 エイリアスは、絶対パス名の省略形としてよく使用されます。 エイリアス機能のオプションにより、エイリアスの値に、対応するコマンドの絶対パス名を自動的に設定できます。 このようなエイリアスは、パス名をトラックされたエイリアスと呼ばれます。パス名をトラックされたエイリアスの値は、最初に識別子が読み取られたときに定義され、 PATH 変数がリセットされるたびに定義が解除されます。 このエイリアスはパス名をトラックされた状態を維持するため、 次の参照によって再び値が定義されます。 一部のパス名をトラックされたエイリアスは、シェルに組み込まれます。 set コマンドで -h オプションを使用すると、 識別子である各コマンド名がパス名をトラックされたエイリアスに変換されます。 以下のエクスポートされたエイリアスはシェルに組み込まれていますが、 設定の解除または再定義が可能です。 autoload='typeset -fu' ティルド (~) の置換エイリアスの置換の実行後、各ワードは、引用符で囲まれていない ~ で始まるかどうかチェックされます。 ~ で始まっている場合には、そのワードの / までの部分が、 /etc/passwd ファイルの中のユーザー名と一致するかどうかチェックされます。 一致するものが見つかると、 ~ および一致したログイン名は、一致したユーザーのログインディレクトリに置き換えられます。 これをティルドの置換と呼びます。 一致するものが見つからなければ、元のテキストは変更されません。 単独の ~ 、あるいは / の前の ~ は、 HOME パラメータの値に置き換えられます。 ~ の後に + または - が続く場合、 ~ はそれぞれパラメータ PWD および OLDPWD の値に置き換えられます。 また、パラメータに割り当てる値が ~ で始まる場合にも、ティルドの置換が実行されます。 コマンドの置換コマンドを、前にドル符号を付けた小かっこ ($(command)) またはバックコーテーション (\(gacommand\(ga) で囲むことにより、 そのコマンドからの標準出力を 1 つのワードまたはワードの一部として使用することができます。 末尾の改行は削除されます。 2 番目の形式 (旧形式) の場合には、 コーテーションの間の文字列の中に特殊な引用文字があれば、 コマンドの実行前に処理されます (下記の「引用」を参照)。 $(cat file) というコマンド置換の代わりに、より高速で同等な $(<file) を使用できます。 入出力 リダイレクションを実行しない 大部分の特殊コマンド (組み込みコマンド) のコマンド置換は、別のプロセスを生成せずに実行されます。 ただし、関数のコマンド置換によって、その関数および関数内の すべてのコマンド (組み込みまたはそれ以外) を実行するために 別のプロセスが生成されます。 ドル符号が前に付いた二重の小かっこで囲まれた算術式 ($((expression))) は、二重小かっこ内の算術式の値で置き換えられます (算術式の説明については、後述の「算術式の評価」の項を参照)。 パラメータの置換パラメータ とは、 識別子 、数字 (1 個 - 複数個)、または *, @, #, ?, -, $, および ! のいずれかの文字です。名称付きパラメータは、識別子によって表されるパラメータで、値と属性 (0 個 - 複数個) を持っています。名称付きパラメータには、 typeset 特殊コマンドを用いて値と属性を割り当てることができます。 ksh がサポートしている属性については、 typeset 特殊コマンドの説明とともに後述します。 エクスポートされたパラメータは、値と属性を環境に渡します。 このシェルは、1 次元配列機能を限定的にサポートしています。 配列パラメータの要素は添え字によって参照されます。 添え字は、算術式を [ と ] の間に記述して表します (下記の「算術式の評価」の項を参照)。 配列への値の割り当ては、 set -A name value ... を用いて行います。 添え字の値はすべて 0 から 1023 の範囲になければなりません。 配列を宣言する必要はありません。 有効な添え字による名称付きパラメータへの参照はすべて正当で、 必要に応じて配列が作成されます。 添え字なしで配列を参照すると、配列の最初の要素が参照されます。 名称付きパラメータの値は、次のような記述によって割り当てることもできます。 name=value \c name に整数属性 -i が設定されている場合には、 value に対して後述の算術評価が実行されます。 位置パラメータは、数値で表されるパラメータで、 set 特殊コマンドを用いて値を割り当てることができます。 パラメータ $0 には、シェルの起動時に引き数 0 の値が設定されます。 文字 $ は、置換可能なパラメータを示すために使用します。
以下のパラメータはシェルが自動的に設定します。
以下のパラメータはシェルによって使用されます。
シェルはパラメータ PATH, PS1, PS2, MAILCHECK, TMOUT, および IFS にデフォルト値を設定します。パラメータ HOME, SHELL, ENV, および MAIL については、シェルは値を自動的に設定しません。 HOME, SHELL, および MAIL は、 login(1) が設定します。 ブランクの解釈パラメータの置換とコマンドの置換の実行後、 置換の結果として生成されたテキストの中からフィールド分離文字 (IFS に設定された文字) が捜し出され、フィールド分離文字の位置でテキストが分割され、それぞれ別個の引き数になります。 ksh は、明示的なヌル引き数 ( または '') はそのまま残しますが、(値を持たない parameters から生成された) 暗黙のヌル引き数は削除します。 ファイル名の生成置換の実行後、各コマンドの word は、 -f オプションが 設定 されていない限り、 1 つのパターンとして処理され、ファイル名展開されます。 パターンの形式は、 regexp(5) で定義されているパターンマッチング表記です。 ワードは、そのパターンと一致したファイル名のソート結果で置き換えられます。 パターンと一致するファイル名が見つからない場合、ワードは変更されません。 regexp(5) で説明されている表記法のほか、 ksh は、1 つまたは複数のパターンリスト | で区切ったもの) から構成された複合パターンを認識します。 複合パータンは以下の形式で指定することができます。
コーテーションの使用前述の メタキャラクタ (「定義」 の項を参照) はそれぞれシェルにとって特殊な意味があり、引用符で囲まない限り、ワードを終了させます。文字の前に \ を記述することにより、その文字を引用\c する (文字自体の本来の意味を表現させる) ことができます。 \new-line という文字ペアは無視されます。 1 組のシングルコーテーションマーク ('') で囲んだ文字はすべて引用されます。 シングルコーテーションの中にシングルコーテーションを入れることはできません。 ダブルコーテーションマーク ("") の中では、パラメータの置換とコマンドの置換が実行され、 \ によって、文字 \, \(ga, ", および $ が引用されます。 $* および $@ の意味は、引用されていない場合あるいはパラメータへの割り当て値やファイル名として使用された場合には、同一となります。 しかし、コマンド引き数として使用すると、 "$*" は "$1d$2d..." (ただし d は IFS パラメータの最初の文字) と同等になるのに対して、 "$@" は "$1" "$2" と同等になります。 バックコーテーションマーク (\(ga\(ga) の中では、 \ によって、文字 \, \(ga, および $ が引用されます。 ダブルコーテーションの中にバックコーテーションが存在する場合には、 \ 文字 " は \ で引用しなければなりません。 キーワードやエイリアスの特殊な意味は、 キーワードの任意の文字を引用することによって取り除くことができます。 ただし、後述の項でリストされている関数名と特殊コマンド名については、 引用しても別の意味に認識させることはできません。 算術式の評価整数演算は、特殊コマンド let によって実行することができます。評価は long 型の算術演算を用いて実行されます。 定数は [base#]n の形式で、 base は算術演算基数を表す 2 から 36 までの 10 進数、 n はその基数表現での数値です。 base を省略すると、基数として 10 が使用されます。 算術式は、C 言語の式と同一の構文、優先順位、結合法則を使用します。 ++, --, ?:, および , を除くすべての整数演算子がサポートされています。 算術式の中では、変数への参照をパラメータ置換構文を使用せずに名称によって行うことができます。 変数が参照されると、その値が算術式として評価されます。 変数の内部的な整数表現は、 typeset 特殊コマンドの -i オプションを用いて指定することができます。 算術評価は、各変数に -i 属性で代入された値に対して行われます。 演算基数を指定しない場合には、変数への最初の割り当てによって演算基数が決定されます。 この基数は、パラメータ置換の実行時に使用されます。 多数の算術演算子は引用を必要とするので、 let コマンドの代わりとなる構文が用意されています。 (( で始まるすべてのコマンドについて、 対応する )) までの間のすべての文字は、引用された式として処理されます。 より正確には、 ((...)) は let "..." と同等です。 プロンプトシェルを対話的に使用すると、シェルはコマンドを読み取る前に PS1 の値をプロンプトとして表示します。改行の入力後、 コマンドを完結させるために入力がさらに必要な場合には、2 次プロンプト ( PS2 の値) が表示されます。 条件式条件式は、ファイルの属性のテストや文字列の比較を行うために、 [[ 複合コマンドとともに使用されます。ワードの分割とファイル名の生成は、 [[ と ]] の間にあるワードに対しては実行されません。 各条件式は、以下に示す単項式または 2 項式を 1 個以上使用して構成することができます。
複合式は、以下の表記の任意のものを用いて、上記のプリミティブから構成することができます (以下のリストは優先順位が高い順です)。
入力/出力コマンドの実行前に、シェルによって解釈される特殊な表記法を用いて、 コマンドの入力と出力をリダイレクトすることができます。 以下に示す各表記は、単純コマンド内の任意の位置、またはコマンドの前後に記述するすることが可能ですが、起動したコマンドには渡されません。 コマンドの置換とパラメータの置換は、以下で特に注記されている場合を除き、 word または digit が使用される前に実行されます。ファイル名の生成は、 パターンが単一のファイルに一致した場合に限って実行されます。 空白の解釈は行われません。
上記のいずれかの表記の前に数字を指定すると、参照されるファイル記述子の番号は、(デフォルトの 0 または 1 ではなく) その数字によって指定された番号になります。 たとえば、 ... 2>&1 と指定すると、 ファイル記述子 2 がファイル記述子 1 の複製として書き込みのためにオープンされます。 リダイレクトの順序は重要です。 シェルは、評価の際に、指定ファイル記述子に対応する 現在オープンされているファイルにより ファイル記述子を参照して 各リダイレクションを評価するからです。 たとえば、 ... 1>fname 2>&1 は、まずファイル記述子 1 (標準出力) をファイル 『 fname 』 に割り当てます。次に、ファイル記述子 2 (標準エラー) を、ファイル記述子 1 に割り当てられているファイル (つまり fname ) に割り当てます。 一方、このリダイレクトの順序を次のように逆にすると、 ... 2>&1 1>fname ファイル記述子 2 には現在の標準出力 (異なる割り当てを継承しなければユーザーターミナル) が割り当てられます。 次にファイル記述子 1 がファイル fname に割り当て直され、ファイル記述子 2 の割り当ては変化しません。 コプロセスの入力と出力は、 番号で指定したファイル記述子に移動させることができるので、上記のリダイレクト演算子を用いれば、他のコマンドはそのファイル記述子との間で読み書きが可能となります。 現在の コプロセスの入力が、 番号で指定されたファイル記述子に移されると、他の コプロセスが起動されます。 ジョブ制御がアクティブでない場合にコマンドの後ろに & を指定すると、このコマンドのデフォルトの標準入力は空のファイル /dev/null になります。 それ以外の場合には、コマンドを起動したシェルのファイル記述子が、入力/出力の指定によって修正された形で、そのコマンドの実行環境に取り込まれます。 環境環境 ( environ (5) を参照) とは、実行されるプログラムに渡される名称と値のペアのリストで、 通常の引き数リストによく似ています。 名称は 識別子 でなければならず、 値は文字列です。 シェルは数種の方法で環境と対話します。 シェルは、起動時に環境を走査し、見つかった名称ごとにパラメータを生成して対応する値を付与し、 エクスポートのマークを付けます。 実行されるコマンドは環境を継承します。 ユーザーが export または typeset -x コマンドを用いてこれらのパラメータの値を修正したり、 新しいパラメータを作成した場合、その値は環境の一部分になります。 したがって、実行されるコマンドから見た環境は、シェルが最初に継承した名称と値のペア (この値は現在のシェルが修正することもあります) と、任意の追加項目 (これは export または typeset -x コマンドで指示する必要があります) から構成されます。 任意の単純コマンド\c や関数の環境は、既存の環境の前にパラメータ割り当て (複数可) を追加することによって増強することができます。 パラメータ割り当て引き数は identifier=value の形式です。 たとえば、 TERM=450 cmd args と (export TERM; TERM=450; cmd args) とは、上記の cmd の実行に関する限り、同等です (ただし、後述の項にリストしたパーセント符号が前に付く特殊コマンドを除く)。 -k オプションを設定すると、すべてのパラメータ割り当て引き数は、 コマンド名の後に指定されていても環境内に取り込まれます。 次の最初のエコー文は a=b c をプリントしますが、 -k オプションが設定された後の、2 番目のエコー文は c のみをプリントします。 echo a=b c この機能は、シェルの初期バージョン用に作成されたスクリプトでの使用を目的としたものなので、新しいスクリプトでこの機能を使用することは避けてください。この機能は、将来廃止される可能性があります。 関数前述の「コマンド」の項で説明した function キーワードは、シェル関数を定義するために使用します。 シェル関数が読み取られると、内部に保存されます。 エイリアス名は、関数が読み取られたときに解決されます。 関数はコマンドと同様に実行され、引き数は位置パラメータとして渡されます (後述の「実行」の項を参照)。 関数は、呼び出し側と同じプロセスで実行されますが、関数のコマンド置換によって新しいプロセスが生成される点が異なります。 関数は、すべてのファイルと現在のワーキングディレクトリを呼び出し側と共用します。 呼び出し側がキャッチしたトラップは、 関数内ではそのデフォルトのアクションが行われません。 関数がキャッチしない、または無視するトラップ条件が発生すると、 関数の実行は終了し、その条件は呼び出し側に渡されます。 関数内部で EXIT に対して設定されたトラップは、関数の終了後に呼び出し側の環境の中で実行されます。 通常の場合、変数は呼び出しプログラムと関数の間で共用されます。 ただし、関数内で typeset 特殊コマンドを使用して定義した変数は、現在の関数および現在の関数が呼び出す全関数を有効範囲とするローカル変数となります。 関数呼び出しから戻るには、特殊コマンド return を使用します。 関数内でエラーが発生すると、制御は呼び出し側に戻ります。 関数識別子は typeset 特殊コマンドの +f オプションを用いてリストすることができます。 関数識別子と関数の関連テキストは -f オプションを用いてリストすることができます。 関数の定義を解除するには、 unset 特殊コマンドの -f オプションを使用します。 通常、シェルがシェルスクリプトを実行すると、関数は設定が解除されます。 typeset コマンドの -xf オプションにより、実行するスクリプトに対して、シェルを再実行せずに関数をエクスポートすることができます。 シェルの起動ごとに共通に定義する必要がある関数は ENV ファイルに入れておく必要があります。 ジョブset コマンドの monitor オプションがオンの場合、 対話型シェルはジョブ\c を各パイプラインに関連づけます。 対話型シェルは、現在のジョブのテーブル (jobs コマンドでプリントされるテーブル) を管理し、各ジョブに小さな整数値を割り当てます。ジョブが & によって非同期に開始されると、シェルは次のような行をプリントします。 [1] 1234 これは、ジョブ番号 1 が非同期に開始され、プロセス ID が 1234 のプロセスが、トップレベルのプロセスとして実行されたことを示します。 ジョブの実行中に別の操作を行いたい場合には、 一時停止文字 (通常は ^Z (Ctrl-Z)) を入力して、 現在のジョブに STOP シグナルを送ることができます。 すると、シェルはジョブが中断された (`Stopped') ことを示し、 別のプロンプトをプリントします。 これにより、 ユーザーはそのジョブの状態を操作することが可能となり、まず bg コマンドを用いてジョブをバックグラウンドに変更してから、 このジョブが停止しているか、あるいはバックグラウンドで動作している間、 他のコマンドを実行し、最後に fg コマンドを用いてジョブを再開するか、あるいはフォアグラウンドに戻すことができます。 ^Z は入力後ただちに作用し、割り込みと同様に、 ^Z をタイプするとペンディング状態の出力と読み取り前の入力は破棄されます。 バックグラウンドで実行中のジョブは、ターミナルから入力を読み取ろうとすると実行が停止します。通常、バックグラウンドジョブは出力を実行できますが、 stty tostop コマンドによって抑止することができます。 この tty オプションを設定すると、バックグラウンドジョブは、出力を実行しようとすると停止します。 シェルの中でジョブを参照する方法はいくつかあります。ジョブの参照は、ジョブの中の任意のプロセスのプロセス ID によって、または以下のいずれかの指定形式で行うことができます。
シェルは、プロセスの状態の変化をただちに認識します。 ジョブがブロックされ、それ以上実行を継続できなくなると、 シェルはプロンプトを表示する直前にユーザーに通知します。 モニターモードがオンの場合には、バックグラウンドジョブが終了するたびに CHLD に対して設定したトラップが引きおこされます。 ジョブの実行中または停止中にシェルを終了させようとすると、 You have stopped (running) jobs という警告メッセージが表示されます。 この場合には、 jobs コマンドを使用して、対象となったジョブを識別することができます。そのまま再度シェルを終了させようとすると、シェルは 2 回目の警告は行わず、停止していたジョブは終了します。 シグナル実行中のコマンドに対する INT および QUIT シグナルは、コマンドの後に & が指定され、しかも monitor オプションがオフの場合には無視されます。 それ以外の場合、シグナルの値は、シグナル 11 の場合を除いて、 シェルが親プロセスから継承した値となります (ただし、後述の trap コマンドも参照)。 実行置換は、コマンドが実行されるたびに行われます。 コマンド名が後述の項にリストされた『特殊なコマンド』の 1 つと一致した場合、 そのコマンドは現在のシェルプロセスの中で実行されます。 次に、 ksh は、コマンド名がユーザー定義関数のいずれかと一致するかどうか調べます。 一致した場合、 ksh は位置パラメータをいったんセーブし、 代わりにその関数呼び出しの引き数を設定します。 位置パラメータ 0 が関数名に設定されます。 関数が終了すると、 または return を実行すると、 ksh は位置パラメータリストを復元し、関数の中で EXIT に対して設定されたすべてのトラップを実行します。 関数の値は、 最後に実行されたコマンドの値になります。 関数は、現在のシェルプロセスで実行されます。 コマンド名が特殊なコマンドでもユーザー定義の関数"\c でもない場合、 ksh はプロセスを生成し、 exec ( exec(2) を参照) を用いてそのコマンドを実行しようとします。 シェルパラメータ PATH は、コマンドが格納されているディレクトリの検索パスを定義します。 代替ディレクトリ名はコロン (:) で区切ります。 デフォルトのパスは /usr/bin: です (これは /usr/bin, そして現在のディレクトリの順でパスを指定したものです)。 現在のディレクトリは、ヌルのパス名で表され、等号の直後、2 つのコロン (デリミタ) の間、またはパスリストの最後に指定できます。 コマンド名に / が含まれる場合には、検索パスは使用されません。 含まれない場合には、パスに指定されている各ディレクトリで、実行可能ファイルの検索が行われます。 ファイルに実行パーミッションがあるにもかかわらず、ディレクトリでも実行可能なオブジェクトコードファイルでもない場合、そのファイルはスクリプトファイル (インタプリタ用のデータを格納したファイル) であるとみなされます。スクリプトファイルの最初の 2 文字が #! である場合、 exec ( exec(2) 参照) は、その 2 文字の後にインタプリタのパス名が続くものとみなします。 続いて、 exec により、指定されたインタプリタが別個のプロセスとして実行され、スクリプトファイル全体が読み取られます。 exec の呼び出しに失敗した場合には、 /usr/bin/ksh が生成され、スクリプトファイルの解釈が実行されます。 この場合、エクスポートされていないエイリアス、関数、および名称付きパラメータはすべて削除されます。 シェルコマンドファイルに読み取りパーミッションがない場合、または setuid ビットと setgid ビットの少なくとも一方がファイルにセットされている場合、シェルは代理のシェルに、パーミッションをセットアップさせ、シェルコマンドファイルをオープンファイルとして渡す形でシェルを実行させます。 また、小かっこで囲まれたコマンドも、エクスポートされていない要素を削除せずにサブシェルとして実行されます。 コマンドの再入力ターミナルデバイスから入力されたコマンドのテキストは、最後から HISTSIZE で指定された個数分 (デフォルトは 128) だけヒストリ\c ファイルにセーブされます。 ファイル $HOME/.sh_history は、 HISTFILE 変数が設定されていない場合、または書き込み可能でない場合に使用されます。 シェルは、同じ名称の HISTFILE を使用しているすべての対話型\c シェルのコマンドにアクセスすることができます。 特殊コマンド fc を使用すれば、このファイルの一部をリストまたはエディットできます。 ファイルの中のエディットまたはリストしたい部分の選択は、番号によって、またはコマンドの最初の文字 (複数可) の指定によって行うことができます。 単一のコマンドまたはある範囲のコマンドのいずれの指定も可能です。 fc コマンドの引き数としてエディタープログラムを指定しない場合には、パラメータ FCEDIT の値が使用されます。 FCEDIT が定義されていない場合には、 /usr/bin/ed が使用されます。 エディットしたコマンドはプリントされ、エディターの終了時に再実行されます。 エディター名として - を使用すると、エディット操作の段階をスキップしてコマンドを再実行することができます。 この場合、 old=new という形式の置換パラメータを使用すれば、実行前にコマンドを修正できます。 たとえば、 r が fc -e - のエイリアスである場合に、 r bad=good c と入力すると、英字 c で始まるコマンドのうち最後に実行されたものを再実行し、最初に検出した文字列 bad を、文字列 good に置き換えます。 以下の条件のすべてが発生する場合に、ヒストリファイルはトリミングされます。
上記の条件のいずれか 1 つでも発生しない場合には、ヒストリファイルはトリミングされません。ヒストリファイルがトリミングされるときに、そのヒストリファイル内で最新の HISTSIZE コマンドが使用できます。 特殊コマンド以下に示す単純コマンドは、シェルプロセスの中で実行されます。 これらのコマンドでは、入出力のリダイレクトが可能です。 特に指定されない限り、ファイル記述子 1 はデフォルトの出力先となり、exit ステータスは、構文エラーがなければゼロとなります。 % または %% が前に付記されているコマンドは、次のように特別に処理されます。
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||