これはbashの対話型入力メカニズムであるため、システムのman bash、特にReadlineのセクションを読む必要があります。gnu.orgのBashマニュアルには、いくつかのギャップを埋めるのに役立つコマンドライン編集に関する素晴らしいセクションがあります。
デフォルトでは、これらを使用してコマンドライン上を移動できます(ここにいくつかをリストします。完全なリストについてはリンクを参照してください)。
- Ctrl+ a行の先頭に移動しHomeます(または端末設定に応じて)
- Ctrl+ e行末に移動しEndます(または...)
- Meta+ f「単語」を前方に移動します
- Meta+ b「単語」を後方に移動します
これらを使用して、行からテキストを「kill」(別名「cut」)できます。
- Ctrl+ k現在のカーソル位置から行末までのテキストを削除(「カット」)します
- Ctrl+ yヤンク(「貼り付け」)カーソルのあるバッファに最近キルされたテキストを戻します
したがって、これらを組み合わせて、繰り返したいコマンドラインのチャンクを選択し、強制終了して、次のコマンドの最後に貼り付けることができます。
さて、それをさらに楽しくするために、bashのHistory Expansionを考えてみましょう。これは、ということである!!
ということは、ステューダーの答えは言及します。履歴の拡張は、イベント指定子、単語指定子、および修飾子に分類されます。
イベント指定子は次のようになります(完全なリストについてはリンクを参照してください)。
!
-履歴置換を開始します
!n
-bashの履歴リストのn番目のコマンド、いくつかの整数n(ネガでも機能します)
!!
-先行コマンド。に相当!-1
!string
- 文字列で始まる最新のコマンド
単語指定子は、イベントから特定の部分を選択します。:
イベントを単語指定子から分離するために使用します。単語には、行の先頭から始まる0から番号が付けられ、単一のスペースで区切られて現在の行に挿入されます。
$
-最後の引数を指定します(たとえば!!:$
、最後のコマンドの最後の引数。短縮できます!$
)
n
-指定n番目の単語(例えば!str:2
最新のコマンドの第2引数が始まるさSTRを、!!:0
あるコマンド最後のコマンドの)
したがって、例をフォローアップするために、最後のコマンドがの場合、mkdir /some/really/long/path
実行!!
するだけでそのコマンドが再実行されます。しかし、cd
代わりにそのパスにしたい:
$ cd !$
ここで、他のコマンドをいくつか実行し、そのパスを再度参照したいとします。それが最後に実行したmkdirコマンドである場合、これを使用してそのパスを繰り返すことができます。
$ tar czf ~/foo.tgz !mkdir:$