bash
スキルを向上させるための質問です。私はいつもこれをします:
$ history | grep some_long_command
...
...
123 some_long_command1.........
124 some_long_command2.........
...
その後、次のようにして見つけたコマンドを実行できます:
!123
しかし、私はしばしばこれをしたいです:
some_long_command1foobar
つまり実行する前にコマンドを変更します。代わりにbashを使用してこのコマンドを実行できますか?
#some_long_command1
コメントが付けられます。
その後、マウスを使用してコマンドを強調表示し、編集して実行する必要はありません(キーボードを使用するだけで済みます-高速)。
私はそれを行うためのスクリプトを書くことができると思いますが、既にどこかに機能が組み込まれているかもしれません。
ありがとうございました。
Historyコマンドを使用する代わりに、ctrl+r
を使用して、そのコマンドの入力を開始することをお勧めします。変更するように矢印キーを押すと、オートコンプリートの認識が終了し、実行する前に編集できるようになります。
更新:また、入力したばかりの文字列を含むさまざまなコマンドを繰り返し実行する場合は、ctrl+r
を押し続けます
実際には、:p
コマンドを実行して、実際に実行せずに印刷します。例えば:
$ ls -la
$ !!:p
印刷ls -la
を実行せずに前のコマンドとして使用します。 ↑ (上)見つけて編集します。
あなたもできる
!123:p
123番目のコマンドを前のコマンドとして出力します。
fc
コマンドを試して、履歴内のコマンドを編集することもできます。
fcは、以前に対話型シェルに入力されたコマンドを一覧表示、編集、再実行するUnixの標準プログラムです。 fcは、bashシェルのbuilt-inコマンドです。 help fcは使用情報を表示します。
逆インクリメンタル検索(Ctrl+R)、さらにいくつかのbashショートカットがあります:
man bash
から:
前史(C-p) 履歴リストから前のコマンドを取得し、リストに戻ります。 ネクストヒストリー(C-n) 履歴リストから次のコマンドを取得し、リスト内を前方に移動します。 歴史の始まり(M- <) 履歴の最初の行に移動します。 履歴の終わり(M->) 入力履歴の最後、つまり現在入力中の行に移動します。 逆検索履歴(C-r) 現在の行から後方に検索し、必要に応じて履歴を「上」に移動します。これはインクリメンタル検索です。 前方検索履歴(C-s) 現在の行から前方に向かって検索し、必要に応じて履歴を「下に」移動します。これはインクリメンタル検索です。 非増分逆検索履歴(M-p) ユーザーが指定した文字列の非インクリメンタル検索を使用して、現在の行から始まる履歴を逆方向に検索します。 非増分フォワード検索履歴(M-n) ユーザーが指定した文字列の非インクリメンタル検索を使用して、履歴を前方検索します。 yank-nth-arg(M-C-y) 前のコマンドの最初の引数(通常は前の行の2番目のワード)をポイントに挿入します。引数nを使用して、前のコマンドのn番目の単語を挿入します(前のコマンドの単語はWord 0で始まります)。負の引数は、前のコマンドの最後からn番目のWordを挿入します。引数nが計算されると、引数は「!n」履歴展開が指定されたかのように抽出されます。 yank-last-arg(M-。、M-_) 前のコマンドの最後の引数(前の履歴エントリの最後の単語)を挿入します。引数を指定すると、yank-nth-argとまったく同じように動作します。 yank-last-argを連続して呼び出すと、履歴リストに戻り、各行の最後の引数が順番に挿入されます。履歴展開機能は、「!$」履歴展開が指定されているかのように、最後の引数を抽出するために使用されます。 シェル拡張ライン(M-C-e) シェルのように行を展開します。これにより、エイリアスと履歴の展開、およびすべてのシェルワード展開が実行されます。履歴展開の説明については、以下の履歴展開を参照してください。 履歴展開行(M- ^) 現在の行で履歴展開を実行します。履歴展開の説明については、以下の履歴展開を参照してください。 最後の引数を挿入(M-。、M-_) yank-last-argの同義語。 次の操作と取得(C-o) 現在の行を受け入れて実行し、編集のために履歴から現在の行に関連する次の行をフェッチします。引数は無視されます。 編集および実行コマンド(C-xC-e) 現在のコマンドラインでエディターを起動し、結果をシェルコマンドとして実行します。
!123:gs/old/new/
文字列「old」を文字列「new」に置き換えてコマンド123を実行します。
M- ^(Macではoption-shift-6)を押すと、編集モードになります。
これを入力してください:
!123M- ^
そして、コマンド#123を編集します。 ctrl-rを使用するようなものですが、感嘆符の構文から始めます。
history
コマンドを使用する代わりに、history-search-backward
/history-search-forward
簡単に覚えられるキーショートカット(PgUp/PgDownを好む)。これを行うには、これを.inputrc
ファイル:
"<key code>": history-search-backward
"<key code>": history-search-forward
取得するため <key code>
、タイプCtrl-V <key>
シェルで、開始^[
with \e
出力されたものは何でも。
これを設定したら、some
と入力してPgUpを押すとsome_long_command
。必要な場合some_long_command with_some_arg
ただし、同様のコマンドがありますsome_long_command with_some_other_arg
履歴の後半で、some
と入力してからPgUpを繰り返し押すか、またはsome
と入力してPgUpを押し、カーソルを2つのコマンドが異なり始め、数文字を入力して、もう一度PgUpを押します。類似のコマンドをすばやくページング/区別するこの機能により、Ctrl-R
。
また置くことができます
shopt -s histverify
あなたの.bash_profile
を使用すると、コマンドラインで履歴展開を実行せずに表示し、編集前に編集することができます。
「提案ボックス」のような履歴を試してみたいと思うかもしれません https://github.com/dvorka/hstr -Bash履歴を読み取り、迅速なナビゲーションを可能にします。
最後のコマンドを取得するには、hhと入力し、コマンドに移動し、右矢印を使用してコマンドラインで取得します(編集またはコメントの追加が可能)。
^ pは、unix/solarisで最後に入力されたコマンドを取得します
プット
エイリアスr = 'fc -s'
.bashrc
(ホームディレクトリ)に入力するだけで
r <whatever>
コマンドプロンプトで、履歴にある最後の<whatever>
コマンド(同じパラメーター)のコピーを実行します。必要に応じて矢印を押して、実行した内容を確認してください。