bashコマンドライン環境では!!
、最後のコマンドを再実行できます。また、上矢印を押すと、最後に実行したコマンドを確認できます。しかし、特定の方法で開始した最後に実行したコマンドだけを表示して実行したくない場合はどうでしょうか。
bashコマンドライン環境では!!
、最後のコマンドを再実行できます。また、上矢印を押すと、最後に実行したコマンドを確認できます。しかし、特定の方法で開始した最後に実行したコマンドだけを表示して実行したくない場合はどうでしょうか。
回答:
Ctrl+ を使用して履歴を検索しr、コマンドの一部の文字を入力して、を押さずにをEnter押す→と、コマンドが表示され、実行されません。別の選択肢は次のとおりです。
history | grep 'mycommand'
この素晴らしい歴史のチートシートも役立つかもしれません。
fc ### ###
私の知る限り、ここでのすべての回答は移植不可能です。ポータブルオプションについては、POSIX保証を検討してfc
ください。
$ man fc
-e editorコマンドを編集するには、editorによって指定されたエディターを使用します。エディタ文字列はユーティリティ名であり、 PATH変数を介して検索されます... -eが指定されていない場合、 FCEDIT変数の値がデフォルトとして使用されます。FCEDITがnullまたは設定されていない場合は、 edがエディターとして使用されます。
−l (エル)。コマンドをエディターで呼び出すのではなく、コマンドをリストします。コマンドは、最初のオペランドと最後のオペランドが示す順序で、 -rの影響を受けて、各コマンドの前にコマンド番号を付けて記述します。
−n −lで リストするときにコマンド番号を抑制します。
-r リバース記載されているコマンドの順序(と-l)または編集(どちらと-lも-s)。
−s エディタを呼び出さずにコマンドを再実行します。
オペランド
最初、最後 リストまたは編集するコマンドを選択します。アクセスできる以前のコマンドの数は、 HISTSIZE変数の値によって決定されます。最初、最後、または両方の値は、次のいずれかになります。
[+ or-] numberコマンド番号を表す 正(または負)の数値。コマンド番号は、 -lオプションで表示できます...たとえば、 -1は直前のコマンドです...
ときに-lオプションはlistコマンドに使用され、以下のように、リスト内の各コマンドのフォーマットはしなければなりません。
"%d\t%s\n", <line number>, <command>
-lオプションと-nオプションの両方が指定されている場合、各コマンドの形式は次のようになります。
"\t%s\n", <command>
もし 複数の行で構成され、最初の行の後の行は次のように表示されます。
"\t%s\n", <continued-command>
しかし、使用してください-lをか-eあなたがいる場合ONLY /編集をあなたのコマンドを見てみたいです。デフォルトでfc
は、FCEDITで 要求されたコマンドリストを開き(EDITOR環境変数とは異なることに注意)、FCEDITが終了fc
すると、編集されたコマンドを実行します。
とにかく、具体的にはこの質問に対する答えは次のようになります。
% fc -l -1
または行番号なし:
% fc -ln -1
または、最後の5つのコマンドを逆の順序で実行します。
% fc -lrn -1 -5
ポケットベルで:
% fc -lrn -1 -5 |$PAGER
への最後の呼び出しについてfc
:
% fc -l fc
bash
ます。の使用はbash
移植性を排除しませんが、確かに悪い習慣を発達させることになります。
ヒットしてCtrlr、見たいコマンドを入力し始めます。bashは段階的に完了します。満足したら、を押しEnterて再実行するかCtrlg、中止します。
最後のコマンドを使いたいだけなら:
history | cut -c 8- | tail -n 2 | head -n 1
これを繰り返し実行したい場合は、前にスペースを置くhistory
か、次のように使用します。
history | cut -c 8- | grep -Ev '^history' | tail -n 1
patternで始まる最後のコマンドを見たいだけの場合xyz
:
history | cut -c 8- | grep -E '^xyz' | tail -n 1
しかし、パターンが「履歴」の最初の文字であり、次のようなものが必要になる場合、これは機能しません。
history | cut -c 8- | grep -Ev 'history \|' | grep -E '^hist' | tail -n 1
cut
。
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'
次に、テキストを入力してAlt-p、同じコマンドで始まる最後のコマンドを検索します(そしてAlt-p、Alt-nそれらのコマンドを前後に循環します)。
(これらは、の類似したウィジェットのデフォルトのキーバインディングですzsh
)