Go to main content

マニュアルページ セクション 1: ユーザーコマンド

印刷ビューの終了

更新: 2022年7月27日
 
 

hist(1)

名前

history, fc, hist - コマンドの履歴リストの処理

形式

/usr/bin/fc [-r] [-e editor] [first [last]]
/usr/bin/fc -l [-nr] [first [last]]
/usr/bin/fc -s [old=new] [first]

csh

history [-hr] [n]

ksh88

fc -e - [old = new] [command]
fc -s [old = new] [command]
fc [-e ename] [-nlr] [first [last]]

ksh

hist [-lnprs] [-e editor][-N num][first[last]]

説明

/usr/bin/fc

fc ユーティリティーは、以前に対話型 sh に入力されたコマンドの一覧表示、または 編集と再実行を行います。

コマンドの履歴リストは、番号によってコマンドを参照します。リスト中の最初の番号は任意に選択できます。番号とコマンドとの関係は変わることはありません。ただしユーザーがログインしたときに、どのプロセスもリストをアクセスしていない場合を除きます。この場合には、システムは番号をリセットするので、保存されているもっとも古いコマンドは別の番号 (通常は 1) で開始できます。番号が、HISTSIZE の値と 32767 の大きい方の値に到達したとき、シェルは番号を循環させるので、次のコマンドはより小さい数字 (通常は 1) で開始できます。ただし、このように番号が循環しても、fc は時間の順序は把握しています。たとえば 4 つのコマンドにそれぞれ 32 766 、32 767、1 (循環後)、2 という番号が与えられたとき、32 767 は 1 よりも大きい値であっても 1 以前に実行されたものであると認識しています。

コマンドが編集されたとき (–l オプション省略時) 、結果として生成された行が履歴リストの最後尾に記録され、sh によって再実行されます。編集作業を起動した fc コマンド自身は履歴リストには記録されません。エディタがゼロ以外の終了ステータスを返した場合、履歴リストへの記録や再実行は抑制されます。fc コマンドに指定したコマンド行変数割り当てやリダイレクト演算子は、fc コマンド自身および生成されるコマンドの両方に対して有効です。次の例を見てください。

fc -s -- -1 2>/dev/null

この例は以前のコマンドを再度呼び出すものですが、fc および以前のコマンドの両方に対して標準エラー出力を抑制します。

csh

履歴のリストを表示します。n を指定すると、n 個の最新の履歴を表示します。

–r

出力を、古い履歴からではなく最近の履歴から順に並べ変えます。

–h

先頭に番号を付加せずに履歴のリストを出力します。–h オプションを使用することにより、csh 組み込みコマンドの source(1) の入力に適したファイルを出力できます。

履歴置換:

履歴置換を使用すれば、以前入力したコマンド行のワードを、これから入力するコマンド行で使用できます。これにより、綴りの訂正、複雑なコマンドや引数の繰り返し入力が簡単になります。コマンド行は履歴リストに保存されます。履歴リストのサイズは history 変数によって変更できます。history シェル変数は、履歴ファイルに保存されるコマンド行の最大数に設定されます。たとえば

set history = 200

は、履歴リストに最新の 200 コマンド行のトラックを保管します。設定を行わない場合、C シェルは最新のコマンドだけを保存します。

履歴置換の指定は ! で始まり (histchars 変数によりほかの文字に変更可能)、コマンド行のどこに現われてもかまいません。ただし履歴置換のネストはできません。! を \ でエスケープすれば、その特別な意味を抑制できます。

履歴置換を含んだ入力行は、展開された後で、他の置換が起こる前またはコマンドが実行される前に、端末上に表示されます。

イベント指示子

イベント指示子は、履歴リスト内の コマンド行エントリを参照するものです。

!

次の文字がスペース文字、タブ、復帰改行、=、または ( でなければ、履歴置換を開始します。

!!

直前のコマンドを指します。他の文字を加えずにこれだけを入力すると、直前のコマンドを繰り返します。

!n

n 番のコマンド行を指します。

!–n

入力中のコマンドから n 個前のコマンドを指します。

!str

str で始まる最新のコマンドを指します。

!?str?

str を含む最新のコマンドを指します。

!?str? additional

str を含む最新のコマンドを指し、その参照コマンドに additional を追加します。

!{command} additional

command で始まる最新のコマンドを指し、その参照コマンドに additional を追加します。

^previous_word^replacement^

文字列 previous_word を文字列 replacement に置き換えて、直前のコマンド行を繰り返します。これは履歴置換と同等です。

文字列 previous_word を文字列 replacement に置き換えて、直前のコマンド行を繰り返します。これは履歴置換と同等です。

!:s/previous_word/replacement/.

以前の特定のコマンドを再実行し、さらに同じような置換を行う場合、たとえば 6 番目のコマンドを再実行するには、次のようにします。

!:6s/previous_word/replacement/.
ワード指示子:

A ‘:’ ( コロン ) はイベント指示子とワード指示子とを区切ります。ワード指示子が ^、$、*、–、または % で始まるときは省略できます。直前のコマンドからワードを選択する場合、イベント指示子の 2 番目の ! は省略できます。たとえば、!!:1 と !:1 は、両方とも直前のコマンドの最初のワードを指します。また、!!$ と !$ は、両方とも直前のコマンドの最後のワードを指します。ワード指示子には以下のものがあります。

#

今までに入力したすべてのコマンド行

0

最初に入力したワード (コマンド)

n

n 番目の引数

^

最初の引数。1 と同じ

$

最後の引数

%

最新の ?s による検索で一致したワード

x–y

ワードの範囲。–y は 0–y の省略形

*

すべての引数。イベント中に 1 ワードしか存在しないときは NULL

x*

x–$の省略形

x–

x* と同じであるが、ワード $ を省略

修飾子:

オプションのワード指示子の後に、: で始まる 1 つ以上の修飾子を追加できます。

h

パス名の後部分のコンポーネントを除去して、前部分を残します。

r

‘.xxx’ の形の接尾辞を除去して、ベース名を残します。

e

接尾辞以外はすべて除去して、拡張部分を残します。

s/oldchars/replacements/

replacements を oldchars に置換します。oldchars は組み込まれたスペースを含む文字列ですが、イベント指示子にある previous_word はスペースを含みません。

^oldchars^replacements^
t

パス名の前部分のコンポーネントを除去して、後部分を残します。

&

前の置換を繰り返します。

g

各ワード内の最初の一致が発生した箇所を、前述のオプションに接頭辞を付けて変更します ( たとえば g&) 。

p

新しいコマンドを表示するだけで、実行はしません。

q

置換されたワードをクォートして、それ以上の置換をエスケープします。

x

q と同じですが、スペース文字、タブ、復帰改行文字 (NEWLINE) ごとにワードに分割します。

g を先頭に付加しないと、oldchars に一致する最初の文字列だけが変更されます。一致する文字列がなければ、エラーとなります。

置換部分の左側は正規表現ではなく文字列です。/ の箇所には、区切り文字としてどのような文字でも使用できます。区切り文字用の文字はバックスラッシュで囲まれます。右側の & 文字は、左側のテキストで置換されます。& はバックスラッシュでクォートすることができます。oldchars が NULL のとき、直前の文字列における oldchars、または !?s における文脈検索文字列 s を使用します。同様に replacements の直後に復帰改行がある場合、文脈検索の最右にある ? は省略できます。

イベントが指定されないと、履歴リファレンスは前のコマンドか、(もしあれば) そのコマンド行上での前の履歴リファレンスを参照します。

ksh88

次の形式で fc を指定します。

fc -e − [old=new] [command],

または

fc -s [old=new] [command],

この場合、old=new の置換を行なったあとで command が再実行されます。command 引数を省略すると、最後に行なったコマンドが実行されます。

次の形式で fc を指定します。

fc [-e ename] [-nlr ] [first [last]],

この場合、端末から最近入力された HISTSIZE 個のコマンドの中から、first から last までの範囲のコマンドを選択します。first と last の両引数は、数値または文字列で指定できます。文字列の場合、その文字列で始まる最新のコマンドを見つけます。負の数値は、現在のコマンド番号からのオフセットとなります。–l オプションを指定すると、標準出力上にコマンドを一覧表示します。–l を指定しないと、これらのキーボードコマンドの入ったファイル上で e ename で示すエディタプログラムを起動します。ename が省略されていると、変数 FCEDIT (デフォルトは /bin/ed) の値をエディタとして使用します。編集が完了すると、編集されたコマンドを実行します。last を指定しない場合、 first と同一値に設定されます。first を指定しない場合、 デフォルトは、編集については直前のコマンドに、一覧表示については –16 になります。–r オプションはコマンドの順序を逆にします。–n オプションは一覧表示時にコマンド番号の出力を抑制します(コマンド行編集の詳細については ksh88(1) を参照)。

HISTFILE

シェルの起動時にこの変数が設定されていると、その値はコマンド履歴を格納するために使用されるファイルのパス名になります。

HISTSIZE

シェルの起動時にこの変数が設定されていると、このシェルで使用可能な入力済みコマンドの数がこの値以上になります。デフォルト値は 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 組み込みコマンドを指定すると、すべてのコマンドが履歴ファイルから削除されます。

ksh

hist は、現在のシェル環境に以前に入力されたコマンドの一覧表示、編集、または再実行を行います。

コマンドの履歴リストは、番号によってコマンドを参照します。リスト中の最初の番号は任意に選択できます。ログインセッション中は、番号とそのコマンドの関係が変わることはありません。番号は 32767 に達すると 1 に戻りますが、順序は維持されます。

l オプションが指定されておらず、コマンドが編集された場合、結果の行は、履歴リストの末尾に入力され、現在のシェルによって再実行されます。編集作業を起動した hist コマンド自身は履歴リストには記録されません。エディタがゼロ以外 (non-zero) の終了ステータスを返した場合、履歴リストへの記録や再実行は抑制されます。コマンド行変数代入とリダイレクトは、hist コマンドおよび再実行されるコマンドの両方に対して有効です。

first と last は、コマンドの範囲を定義します。first と last には、次のいずれかを指定します。

number

コマンド番号を表す正の整数。+ 記号を number の前に指定できます。

-number

いくつ前のコマンドかを示す負の数。たとえば前回実行したコマンドなら -1 となります。

string

string は、string で始まるコマンドのうち、最後に実行したコマンドを示します。string には = を含めないようにしてください。

first を省略すると、前回のコマンドが使用されます。ただし、-l を指定した場合は、デフォルトで first は -16 になり、last は -1 になります。

first を指定し、last を省略した場合、last はデフォルトで first になります。ただし、-l を指定した場合は、デフォルトで -1 になります。

エディタを指定しない場合、HISTEDIT 変数 (設定されている場合) または FCEDIT 変数 (設定されている場合) によって指定されたエディタが使用されます。それ以外の場合は、ed が使用されます。

オプション

サポートしているオプションは、次のとおりです。

–e editor

editor が示すエディタを使ってコマンドを編集します。文字列 editor はユーティリティー名で、PATH 変数の値に従って検索されます。–e を指定しない場合、 FCEDIT 変数の値がデフォルトとして用いられます。FCEDIT の値が NULL または未設定のときは、エディタとして ed が使用されます。

–l

(小文字のエル)エディタを呼び出して編集する代わりに、コマンドを一覧表示します。first と last の両オペランドで指定した範囲のコマンドを、–r オプションがあればそれに従って、順番にコマンド番号付きで表示します。

–n

–l オプションによる一覧表示において、コマンド番号を出力しません。

–r

コマンドの一覧表示 (–l 指定時) または編集 (–l および –s 省略時) において、順序を逆にします。

–s

エディタを呼び出さずにコマンドを再実行します。

ksh

ksh では次のオプションがサポートされています。

–e editor

history コマンドの編集に使用するエディタを指定します。editor の値 - は、–s オプションを指定するのと同等です。

–l

コマンドの編集および再実行を行わずに、コマンドを一覧表示します。

–N num

num コマンド前から開始します。

–n

コマンドを一覧表示するときに、コマンド番号を抑制します。

–p

各オペランドの履歴展開の結果を標準出力に書き込みます。その他のすべてのオプションは無視されます。

–r

コマンドの順序を逆にします。

–s

エディタを呼び出さずにコマンドを再実行します。この場合、old=new 形式のオペランドを指定すると、コマンドで最初に出現した文字列 old を new に変更してからコマンドを再実行できます。

オペランド

次のオペランドがサポートされています。

first
last

表示または編集するコマンドを選択します。いくつまでさかのぼってコマンドをアクセスできるかは、HISTSIZE 変数の値により決まります。first と last の値は、それぞれ次のいずれかです。

[+]number

コマンド番号を表す正の整数。過去に実行した各コマンドの番号は、–l オプションを使えば確認できます。

-number

いくつ前のコマンドかを示す負の整数。たとえば直前に実行したコマンドなら -1 となります。

string

指定した文字列で始まっていたコマンドのうち、最後に実行したコマンド。old=new オペランドが –s オプションなしで指定された場合、文字列形式の first オペランドを使用するなら、その文字列中に等記号を含めることはできません。

「形式」の節で示した形式で、–s を指定する場合、first を省略すると、直前のコマンドが使用されます。

For the synopsis forms without –s:

  • last を省略すると、デフォルト値は l 指定時は直前のコマンドとなり、–l 省略時は first の値となります。

  • first と last の両方を省略すると、–l 指定時は直前の 16 個のコマンドの表示、l 省略時は直前の 1 つのコマンドの編集となります。

  • first と last の両方を指定すると、first から last までのすべてのコマンドが表示 (–l 指定時) または編集 (–l 省略時) されます。複数のコマンドを一度に、それぞれを新たな行で開始してエディタに渡せば、複数コマンドの編集が可能です。first が示すコマンドが last が示すものより新しい場合、–r 指定時と同じように逆の順序で表示または編集されます。次の例では、1 行目のコマンドは、2 行目の対応するコマンドと同等です。

    fc -r 10 20     fc    30 40
    fc   20 10      fc -r 40 30
  • コマンドの範囲を使用する場合、履歴リストに存在していない値を first や last に指定してもエラーとはなりません。fc は、存在しているもっとも古いまたは新しい番号を、その代わりに使用します。たとえば、履歴リスト中に 10 個のコマンドが記録されていて、そのコマンド番号が 1 から 10 となっているとします。

    fc -l
    fc 1 99

    この場合、いずれも 10 個のコマンドすべてを表示または編集することになります。

old=new

再実行対象のコマンド中に最初に現れた文字列 old を、ほかの文字列 new に置き換えます。

出力

–l オプションを使ってコマンドを表示する場合、その出力形式は次のとおりです。

"%d\t%s\n", <line number>, <command>

–l と –n の両オプションを指定すると、各コマンドの出力形式は 次のようになります。

"\t%s\n", <command>

command が複数の行で構成されている場合、2 行目以降は次のように表示されます。

"\t%s\n", <continued-command>

例

使用例 1 history と fc の使用例

             csh                                     ksh88

% 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 の実行に影響を与える次の環境変数についての詳細は、environ(7) を参照してください。LC_CTYPE、LC_MESSAGES、および NLSPATH。

FCEDIT

この変数は、シェルによって展開されると、–e editor オプションの editor のデフォルト値を定義します。FCEDIT の値が NULL または未設定のときは、エディタとして ed(1) が使用されます。

HISTFILE

コマンドの履歴ファイル名を表すパス名を定義します。HISTFILE 変数が設定されていないと、シェルはユーザーのホームディレクトリ内で .sh_history というファイルをアクセスまたは生成しようとします。この履歴ファイルへの読み込みおよび書き込みアクセスができない、または生成できない場合、シェルは何らかのメカニズムを使って履歴が正しくとれるようにします。(この項で述べる履歴ファイルの参照とは、このメカニズムが使用される場合があることを前提としています。)履歴ファイルの初期化時にのみ fc をアクセスするようにすることもできます。初期化は、fc または sh がユーザーからのコマンドに従って、最初にこのファイル、または ENV 変数が指定するファイル、または /etc/profile のようなシステム起動ファイルからのエントリ検索もしくはエントリの追加を試みたときに発生します。(なお履歴ファイル用の初期化処理は、システム起動ファイルの内容に依存させることもできます。つまり、ユーザーが設定した HISTFILE や HISTSIZE 値を効果的に上書きするようなコマンドを、このファイルに記述することが可能です。たとえば set –o nolog オプションが設定されていなければ、関数定義コマンドが履歴ファイルに記録されます。ENV ファイルの前に呼び出されるシステムスタートアップファイル中に、システム管理者が関数定義を記述しておけば、ユーザーが履歴ファイルの属性を変更するような動作が可能になる前に、履歴ファイルが初期化されます。)シェルが呼び出されると、最初に HISTFILE 変数が参照されます。ほかのシェルが呼び出されるまでは、HISTFILE に対する変更は反映されません。

HISTSIZE

以前のコマンドを最大いくつまでさかのぼってアクセスできるかを 10 進数を使って定義します。この変数が設定されていないと、128 以上の不特定の値がデフォルトとして用いられます。シェルが呼び出されると、最初に HISTSIZE 変数が参照されます。ほかのシェルが呼び出されるまでは、HISTSIZE に対する変更は反映されません。

終了ステータス

次の終了ステータスが返されます。

0

一覧表示の正常終了。

>0

エラーが発生しました。

それ以外の場合、終了ステータスは、fc または hist によって実行されたコマンドの終了ステータスとなります。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os

関連項目

csh(1), ed(1), ksh(1), ksh88(1), set(1), sh(1), source(1), attributes(7), environ(7)