私が最後に実行した特定の方法を開始するコマンドを見つけますか?


8

bashコマンドライン環境では!!、最後のコマンドを再実行できます。また、上矢印を押すと、最後に実行したコマンドを確認できます。しかし、特定の方法で開始した最後に実行したコマンドだけを表示して実行したくない場合はどうでしょうか。


1
質問を変更してください。私はあなたが何を求めているのかまだはっきりしていません。

回答:


18

Ctrl+ を使用して履歴を検索しr、コマンドの一部の文字を入力して、を押さずにEnter押すと、コマンドが表示され、実行されません。別の選択肢は次のとおりです。

history | grep 'mycommand'

この素晴らしい歴史のチートシートも役立つかもしれません。


1
また、最初の一致を探しておらず、逆方向に検索を続けたい場合は、ctrl-rを繰り返し押します。そして、これはbash history&readlineライブラリによって提供される多くの強力なコマンドの1つにすぎません。
オリオン2014年

確認済みの回答があることを考慮して、私は私を引き"^.\{7\}pattern"ます。あなたの回答で表現を使用したい場合は、そうすることができます!

複数のコマンドを編集して再実行する場合も使用できますfc ### ###
Kiwy

9

に追加:pすることで、最後に実行されたコマンドを表示できます!!

$ echo 123
123
$ !!:p
echo 123

特定の名前で最後に実行されたコマンドを表示する場合は、1つの感嘆符を使用します。

$ echo 123
123
$ pwd
/home/cuonglm
$ !echo:p
echo 123

4

私の知る限り、ここでのすべての回答は移植不可能です。ポータブルオプションについては、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

努力の+1。ただし、質問のタグはbashです
grebneke '12 / 03/14

で動作しbashます。の使用はbash移植性を排除しませんが、確かに悪い習慣を発達させることになります。
mikeserv 2014年

移植性を考慮して、ここで最良の回答を受け入れてください。
wildeyes

2

ヒットしてCtrlr、見たいコマンドを入力し始めます。bashは段階的に完了します。満足したら、を押しEnterて再実行するかCtrlg、中止します。


2

最後のコマンドを使いたいだけなら:

 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
jon

1
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'

次に、テキストを入力してAlt-p、同じコマンドで始まる最後のコマンドを検索します(そしてAlt-pAlt-nそれらのコマンドを前後に循環します)。

(これらは、の類似したウィジェットのデフォルトのキーバインディングですzsh


0

次の行をファイルに追加します~/.inputrc

"\e[A": history-search-backward
"\e[B": history-search-forward

次にsource ~/.inputrc、シェルで(またはシェルを再起動します)。

これで、コマンドのいくつかの文字を入力し、上/下矢印を使用して、それらの数文字で始まるコマンドを順番に切り替えることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.