名前 | 形式 | 機能説明 | オプション | オペランド | 出力 | 使用例 | 環境 | 終了ステータス | 属性 | 関連項目
fc ユーティリティは、以前に対話型 sh に入力されたコマンドの一覧表示、または 編集と再実行を行います。
コマンドの履歴リストは、番号によってコマンドを参照します。 リスト中の最初の番号は任意に選択できます。 コマンド番号とコマンドとの関係は変わることはありません。 ただしユーザーがログインしたときに、どのプロセスも リストをアクセスしていない場合を除きます。 この場合には、システムはコマンド番号をリセットするので、 保存されている最も古いコマンドに新たな番号 ( 通常は 1) が与えられます。コマンド番号が、HISTSIZE の値と 128 の大きい方の値に到達したとき、シェルは番号を循環させるので、次のコマンドが再び最小値 (通常は 1) から始まります。このように番号が循環しても、fc は時間の順序は把握しています。 たとえば 4 つのコマンドにそれぞれ 32 766 、32 767、 1 ( 循環後 )、 2 という番号が与えられたとき、 32 767 は 1 よりも大きい値であっても 1 以前に実行されたものであると認識しています。
コマンドが編集されたとき (-l オプション省略時 ) 、結果として生成された行が履歴リストの最後尾に記録され、sh によって再実行されます。編集作業を起動した fc コマンド自身は履歴リストには記録されません。 エディタがゼロ以外の終了ステータスを返した場合、 履歴リストへの記録や再実行は抑止されます。fc コマンドに指定したコマンド行変数割り当てや リダイレクト演算子は、fc コマンド自身および生成されるコマンドの両方に対して有効です。次の例を見てください。
fc -s -- -1 2>/dev/null |
履歴のリストを表示します。 n を指定すると、 n 個の最新の履歴を表示します。
出力を、古い履歴からではなく 最近の履歴から順に並べ変えます。
先頭に番号を付加せずに履歴の リストを出力します。 -h オプションを使用することにより、 csh 組み込みコマンドの source(1) の入力に適したファイルを出力することができます。
履歴置換: 履歴置換を使用すれば、 以前入力したコマンド行のワードを、 これから入力するコマンド行で使用できます。 これにより、 綴りの訂正、 複雑なコマンドや引数の繰り返し入力が簡単になります。 コマンド行は履歴リストに保存されます。 履歴リストのサイズは history 変数によって変更できます。 history シェル変数は 履歴ファイルに保存されるコマンド行の 最大数に設定されます。 たとえば
set history = 200
は、履歴リストに最新の 200 コマンド行のトラックを保管します。 設定を行わない場合、 C シェルは最新のコマンドだけを保存します。
履歴置換の指定は ! で始まり ( histchars 変数により他の文字に変更可能)、 コマンド行のどこに現われてもかまいません。 ただし履歴置換のネストはできません。 ! を \ でエスケープすれば、 その特別な意味を抑制できます。
履歴置換を含んだ入力行は、 展開された後で、 他の置換が起こる前または コマンドが実行される前に、 端末上に表示されます。
イベント指示子は、 履歴リスト内の コマンド行エントリを参照するものです。
次の文字が空白文字、 タブ、 復帰改行、 =、 または ( でなければ、 履歴置換を開始します。
直前のコマンドを指します。 他の文字を加えずにこれだけを入力すると、 直前のコマンドを繰り返します。
n 番のコマンド行を指します。
入力中のコマンドから n 個前のコマンドを指します。
str で始まる最新のコマンドを指します。
str を含む最新のコマンドを指します。
str を含む最新のコマンドを指し、 その参照コマンドに additional を追加します。
command で始まる最新のコマンドを指し、 その参照コマンドに additional を追加します。
文字列 previous_word を文字列 replacement に置き換えて、 直前のコマンド行を繰り返します。 これは履歴置換と同じ動作です。
!:s/previous_word/replacement/.
!:6s/previous_word/replacement/.
ワード指示子:
A `:' ( コロン ) はイベント指示子とワード指示子とを区切ります。 ワード指示子が ‸、 $、 *、 –、 または % で始まるときは省略できます。 直前のコマンドからワードを選択する場合、 イベント指示子の 2 番目の ! は省略できます。 たとえば !!:1 と !:1 は、 両方とも直前のコマンドの最初のワードを指します。 また、 !!$ と !$ は、 両方とも直前のコマンドの最後のワードを指します。 ワード指示子には以下のものがあります。
今までに入力したすべてのコマンド行
最初に入力したワード ( コマンド )
n 番目の引数
最初の引数。 1 と同じ
最後の引数
最新の ?s による検索で一致したワード
ワードの範囲。 –y は 0–y の省略形
すべての引数。 イベント中に 1 ワードしか存在しないときは NULL
x–$ の省略形
x* と同じだが、 ワード $ を省略
修飾子:
オプションのワード指示子の後に、 : で始まる 1 つ以上の修飾子を追加できます。
パス名の後部分の構成要素を除去して、 前部分を残します。
`.xxx' の形の接尾辞を除去して、 ベース名を残します。
接尾辞以外はすべて除去して、 拡張部分を残します。
replacements を oldchars に置換します。 oldchars は組み込まれた空白文字を含む文字列ですが、 イベント指示子、 ‸oldchars‸replacements‸ にある previous_word は空白文字を含みません。
パス名の前部分の構成要素を除去して、 後部分を残します。
前の置換を繰り返します。
各ワード内の最初の一致が発生した箇所を、 上記のオプションに接頭辞を付けて変更します ( たとえば g&) 。
新しいコマンドを表示するだけで、 実行はしません。
置換されたワードをクォートして、 それ以上の置換をエスケープします。
q と同じですが、 空白文字、 タブ、 復帰改行文字 (NEWLINE) ごとにワードに分割します。
g を先頭に付加しないと、oldchars に一致する最初の文字列だけが変更されます。 一致する文字列がなければ、 エラーとなります。
置換部分の左側は正規表現ではなく文字列です。 / の箇所には、 区切り文字としてどのような文字でも使用できます。 区切り文字用の文字はバックスラッシュで囲まれます。 右側の & 文字は、 左側のテキストで置換されます。 & はバックスラッシュでクォートすることができます。 oldchars が NULL のとき、 直前の文字列における oldchars 、または !?s. における文脈検索文字列 s を使用します。 同様に replacements の直後に復帰改行がある場合、 文脈検索の最右にある ? は省略できます。
イベントが指定されないと、 履歴リファレンスは前のコマンドか、 (もしあれば ) そのコマンド行上での 前の履歴リファレンスを参照します。
fc -e- [ old=new ] [ command ] の形式で fc を指定すると、 old=new の置換を行なった後で command が再実行されます。command 引数を省略すると、最後に行なったコマンドが実行されます。
fc [ -e ename ] [ -nlr ] [ first [ last ] ] の形式で fc を指定すると、端末から最近入力された HISTSIZE 個のコマンドの中から、first から last までの範囲のコマンドを選択します。first と last の両引数は、 数値または文字列で指定できます。 文字列の場合、その文字列で始まる最新のコマンドを見つけます。 負の数値は、 現在のコマンド番号からのオフセットとなります。-l オプションを指定すると、標準出力上にコマンドを一覧表示します。 -l を指定しないと、これらのキーボードコマンドの入ったファイル上で -e ename で示すエディタプログラムを起動します。 ename が省略されていると、 変数 FCEDIT (デフォルトは /bin/ed) の値をエディタとして使用します。 編集が完了すると、 編集されたコマンドを実行します。last を省略すると、first と同一値に設定されます。first を省略すると、デフォルトは、編集については直前のコマンドに、 一覧表示については –16 になります。-r オプションはコマンドの順序を逆にします。-n オプションは一覧表示時にコマンド番号の出力を抑止します (コマンド行編集の詳細については ksh(1) を参照) 。
シェル起動時にこの変数が設定されていると、その値はコマンド履歴 を格納するために使用されるファイルのパス名になります。
シェル起動時にこの変数が設定されていると、このシェルで使用可能な入力済みコマンドの数が、この値以上になります。デフォルト値は 128 です。
コマンド再入力:
端末装置から最近入力された HISTSIZE が示す個数 (デフォルトは 128 個) のコマンドのテキストは、履歴ファイルに保存されています。 $HOME/.sh_history というファイルは、HISTFILE 変数が設定されていない場合、または変数が示すファイルが書き込み不可能な場合に使用されます。シェルは、同じ名前の HISTFILE を使用する対話型シェルすべてのコマンド履歴を使用できます。fc という特殊コマンドは、 このファイルの一部をリスト表示または編集するときに使用します。 編集またはリスト表示すべきファイルの部分は、 番号か、 またはコマンドの最初の文字 を 指定することによって選択できます。 単一のコマンドを指定することも、コマンドの範囲を指定することも可能です。fc の引数としてエディタプログラムが指定されていないと、FCEDIT という変数の値が使用されます。FCEDIT が未定義の場合は、/bin/ed が使われます。編集されたコマンドは、 エディタを終了した時点で 表示および再実行されます。エディタ名に – を指定すると、 編集段階が省かれ、コマンドが再実行されます。 この場合、 old=new という形式の代入パラメタを使用すれば、 実行前にコマンドを変更できます。 たとえば、 r が 'fc -e -' の別名として定義されているとき `r bad=good c' と入力すると、c という文字で始まるコマンドのうち最新のものが、その記述中の最初の bad という 文字列を good に置き換えられて再実行されます。
複合コマンドの中に fc 組み込みコマンドを指定すると、 すべてのコマンドが履歴ファイルから 削除されます。
以下のオプションを指定できます。
editor が示すエディタを使ってコマンドを編集します。文字列 editor はユーティリティ名で、 PATH 変数の値に従って検索されます。-e を省略すると、 FCEDIT 変数の値がデフォルトとして用いられます。FCEDIT の値が NULL または未設定のときは、エディタとして ed が使用されます。
(文字のエル) エディタを呼び出して編集する代わりに、コマンドを一覧表示します。 first と last の両オペランドで指定した範囲のコマンドを、 -r オプションがあればそれに従って、順番にコマンド番号付きで表示します。
-l オプションによる一覧表示において、コマンド番号を出力しません。
コマンドの一覧表示 (-l 指定時) または編集 (-l および -s 省略時) において、順序を逆にします。
エディタを呼び出さずにコマンドを再実行します。
以下のオペランドを指定できます。
first
表示または編集するコマンドを選択します。いくつまでさかのぼってコマンドをアクセスできるかは、HISTSIZE 変数の値により決まります。first と last の値は、それぞれ以下のいずれかです。
コマンド番号を表す正の整数。過去に実行した各コマンドの番号は、 -l オプションを使えば確認できます。
いくつ前のコマンドかを示す負の整数。 たとえば直前に実行したコマンドなら -1 となります。
指定した文字列で始まっていたコマンドのうち、 最後に実行したコマンド。old=new オペランドが -s オプションなしで指定された場合、文字列形式の first オペランドを使用するなら、その文字列中に等記号を含めることはできません。
「形式」の項で示した形式で、-s を指定する場合、
first を省略すると、直前のコマンドが使用されます。
「形式」の項で示した形式で、-s を指定しない場合、
last を省略すると、デフォルト値は -l 指定時は直前のコマンドとなり、-l 省略時は first の値となります。
first と last の両方を省略すると、-l 指定時は直前の 16 個のコマンドの表示、-l 省略時は直前の 1 つのコマンドの編集となります。
first と last の両方を指定すると、 first から last までのすべてのコマンドが表示 (-l 指定時) または編集 ( -l 省略時 ) されます。複数のコマンドを一度に、 各々を新たな行で開始してエディタに渡せば、複数コマンドの編集が可能です。first が示すコマンドが last が示すものより新しい場合、-r 指定時と同じように逆の順序で表示または編集されます。次の例を見てください。1 行目の 2 つのコマンドは、2 行目のそれぞれ真下にあるコマンドと同じ意味を持ちます。
fc -r 10 20 fc 30 40 fc 20 10 fc -r 40 30
再実行対象のコマンド中に最初に現れた文字列 old を、他の文字列 new に置き換えます。
-l オプションを使ってコマンドを表示する場合、 その出力形式は次のとおりです。
"%d\t%s\n", <line number>, <command>
-l と -n の両オプションを指定すると、各コマンドの出力形式は 次のようになります。
"\t%s\n", <command>
command が複数の行で構成されている場合、 2 行目以降は以下のように表示されます。
"\t%s\n", <continued-command>
csh ksh % history $ fc -l 1 cd /etc 1 cd /etc 2 vi passwd 2 vi passwd 3 date 3 date 4 cd 4 cd 5 du . 5 du . 6 ls -t 6 ls -t 7 history 7 fc -l % !d $ fc -e - d du . du . 262 ./SCCS 262 ./SCCS 336 . 336 . % !da $ fc -e - da Thu Jul 21 17:29:56 PDT 1994 Thu Jul 21 17:29:56 PDT 1994 % $ alias \!='fc -e -' % !! $ ! date alias ='fc -e -' Thu Jul 21 17:29:56 PDT 1994
fc の実行に影響を与える環境変数 LC_CTYPE 、 LC_MESSAGES 、 NLSPATH についての詳細は、 environ(5) を参照してください。
この変数は、シェルによって展開されると、 e editor オプションの editor のデフォルト値を定義します。 FCEDIT が NULL または未設定の場合、エディタとして ed が使用されます。
コマンドの履歴ファイル名を表すパス名を定義します。 HISTFILE 変数が設定されていないと、シェルはユーザーのホームディレクトリ内で .sh_history というファイルをアクセスまたは生成しようとします。この履歴ファイルへの読み込みおよび書き込みアクセスができない、または生成できない場合、シェルは何らかのメカニズムを使って 履歴が正しくとれるようにします。 (この項で述べる履歴ファイルの参照とは、 このメカニズムが使用される場合があることを前提としています。) 履歴ファイルの初期化時にのみ fc をアクセスするようにすることもできます。 初期化は、 fc または sh がユーザーからのコマンドに従って、最初にこのファイル、または ENV 変数が指定するファイル、または /etc/profile のようなシステム起動 ファイルからのエントリ検索もしくはエントリの追加を試みたときに 発生します。 なお履歴ファイル用の初期化処理は、 システム起動ファイルの内容に依存させることもできます。 つまり、ユーザーが設定した HISTFILE や HISTSIZE 値を効果的に上書きするようなコマンドを、このファイルに記述することが可能です。たとえば set -o nolog オプションが設定されていなければ、関数定義コマンドが 履歴ファイルに記録されます。 ENV ファイルの前に呼び出されるシステムスタートアップファイル中に、 システム管理者が関数定義を記述しておけば、 ユーザーが履歴ファイルの属性を変更するような動作が可能になる前に、 履歴ファイルが初期化されます。 シェルが呼び出されると、最初に HISTFILE 変数が参照されます。 他のシェルが呼び出されるまでは、HISTFILE に対する変更は反映されません。
以前のコマンドを最大いくつまでさかのぼってアクセスできるかを 10 進数を使って定義します。この変数が設定されていないと、 128 以上の不定の値がデフォルトとして用いられます。 シェルが呼び出されると、最初に HISTSIZE 変数が参照されます。 他のシェルが呼び出されるまでは、HISTSIZE に対する変更は反映されません。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
使用条件 | SUNWcsu |
名前 | 形式 | 機能説明 | オプション | オペランド | 出力 | 使用例 | 環境 | 終了ステータス | 属性 | 関連項目