Bashでは、 history コマンドは、シェルセッション中に何をしていたかを理解するだけでなく、将来実行する新しいコマンドの原料にもなります。 歴史 ヘッドレスサーバーを実行している場合に特に便利です。マウスがない場合、複雑なコマンドの後半を簡単にコピーして貼り付けて、わずかに変更されたバージョンを実行することはできません。そのため、 history を使用しない限り、すべてをもう一度入力する必要があります。コード> 修飾子。
履歴を履歴から除外する
履歴について説明する前に、文字通りの historyを保持するためのヒントを次に示します。 履歴からのエントリ。
historyの使用に関する問題 履歴を確認するコマンド historyにエントリを追加するということです ファイル。これらのエントリは、履歴を乱雑にするだけではありません 、ただし、各行が現在の位置から「さらに」後退する原因にもなります。
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$
移動するターゲットは追跡が難しく、ヒットするのが難しいため、 historyを真剣に使用することを計画している場合 Bashの相互作用を高速化するには、この構成を .bashrcに追加します ファイル:
export HISTCONTROL=$HISTCONTROL:ignorespace
この構成により、スペースが前に付いたコマンドがBashの historyに追加されるのを防ぎます。 。
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
$ [無料のオンラインコース:Red HatEnterpriseLinuxの技術概要。 ]
歴史イベント
シェルの基本構造history イベントのリストから始まります 。 イベント シェルに入力したものの後にReturnが続きます またはEnter 鍵。各イベント にはインデックス番号(行番号)が割り当てられており、イベント指定子を使用してイベントを表示および呼び出すことができます。 。
たとえば、シェルの historyで特定の広告申込情報を呼び出すには 、感嘆符を使用します(! )直後に historyの番号が続きます 行:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
history内の位置に関連する過去のコマンドを参照することもできます リスト。たとえば、コマンド two を実行するには 過去の行では、現在のプロンプトを historyの最後の行より1つ大きいと考えてください 、次に、現在の行番号から実行する行の番号を減算します。この例では、行 103 はターゲットラインであり、 105 現在のプロンプトです( 105-103 =2のデルタの場合 ):
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
最後の行を再実行したいだけの場合は、文字全体を保存できます。式!! および!-1 同義語です:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
history の場合、コマンド自体が出力で繰り返されることに注意してください。 繰り返されます。簡潔さと明確さのために、このような出力はこの記事の残りの例から除外されています。
単語指定子
Bashには、履歴を解析するのに役立つ機能があります 単語指定子を使用する 、および historyのコマンドを変更できるツール 。シェルの履歴について考えると役立つ場合があります インデックス付きの配列として、または多数の小さなアイテムで構成される大きな履歴オブジェクトとしても使用できます。 historyの各行の各単語 は0から始まるインデックスが付けられます(これは通常コマンドですが、マルチパートコマンドと環境変数プレフィックスは注目すべき例外です)。コロン(:)を追加すると、各インデックスにアクセスできます。 )行参照の直後に単語指定子が続きます 。
最初の単語にアクセスする例を次に示します。
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
最初の引数を取得するのが一般的であるため、曲折アクセント記号(または「帽子」: ^ )は:1のエイリアスです 。
$ echo foo
$ !!^
foo
スペクトルの反対側では、ドル( $ )記号は最後の引数を表します:
$ echo foo bar baz
$ echo !!$
baz 単語の範囲
あなたはただ一つの議論のために解決する必要はありません。インデックスの範囲を抽出することもできます。 0番目を除くすべての引数は、アスタリスク( * )で使用できます。 。
$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz
これは実際には1-$の同義語です (つまり、最後の引数の最初の引数)。ご想像のとおり、この省略されていない表記を使用して、範囲を任意に定義できます。この例では、最初と最後の2つの引数を無視して、2番目から5番目の引数を参照しています。
$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh* baz foo rev.bin* spacer.sh* sync.py* インデックスの最後の1つの単語を除外する必要がある場合は、終了のない範囲を指定できます。
$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh* foo spacer.sh* 速度と精度のための履歴の使用
履歴 コマンドは、必ずしもキーの押下を減らすことではありません。 Bashの履歴を使用できます 重要な操作からファイルまたはフォルダを誤って除外したり、ファイル名のスペルを間違えたりしないようにするため。 historyに慣れてください より堅牢なBashインタラクションのためのコマンド。
[Red Hat Enterprise Linuxを試してみませんか?今すぐ無料でダウンロードしてください。 ]