押しすぎずに複数のコマンドをやり直す

押しすぎずに複数のコマンドをやり直す

恥ずかしいことに、前のコマンドをたくさん繰り返すことがよくあります。Up Up Up最初の注文を見つけに行きました。Enter。次に、Up Up Up2 番目のコマンドを再実行します。など。

コマンドを再実行した後、履歴の次のコマンドに移動する方法はありますか?最後の3つのコマンドを再実行するためにUp Up Up Shift++++を実行するのと似ています。Enter ShiftEnter ShiftEnter

わかりましたfc。しかし、シェルだけに関するものではありません。私はPythonインタプリタと基本的にコマンドを入力するどこでもこの問題に直面しました。

答え1

これらはすべてあなたのシェルの記録に関連しておりbash、あなたがPythonについて質問していることがわかりました。これが役に立つことを願っています。

あなたがhistory次のような場合:

1000   command A
1001   other command B
1002   yet another command C

以下を実行できます。 !com

これにより、 ''で始まる最後のコマンドが実行されますcom。文字数(!cまたは!command)を使用することができ、それに続いて!oth!yetコマンドを順番に実行できます。

REDO履歴エントリ#1000を実行すると、次の2つのコマンドが!1000わかって実行さ!1001れます。!1002

個人的にこのような一連のコマンドを実行するには、同じコマンドなどの複数のコマンドを実行し、履歴エントリを提供します。

command A; other command B && yet another command C

またはエイリアスを作成します。

$ alias doThing="command A; other command B && yet another command C"
$ doThing

または関数:

doThing() {
  command A
  other command B && yet another command C
  # Can also use positional arguments:  echo $1
}
$ doThing

これらすべてを考えてみると、私はまさにあなたが期待することをすることができるかもしれません。申し訳ありません。

答え2

bash実行してhistory1000、1001、1002という3つのコマンドを実行する場合:

$ history | tail 
...
1000  echo foo
1001  echo bar 
1002  echo baz 
1003  history | tail

では、bash行番号の前に を付けてそのうちの 1 つだけ実行できます!。セミコロンで区切って、1行にすべて実行することもできます。

$ !1000;!1001;!1002
echo foo;echo bar;echo baz
foo
bar
baz

注:通常どおり、!履歴を使用してコマンドを実行すると、最初に実行するコマンドラインが表示されます。

これはPythonインタプリタや他のほとんどのプログラムでは同じではないかもしれません。同様の歴史的機能を持つ他のいくつかのシェルでも同様に機能します。

ちなみに、この結合されたコマンドは履歴に1行だけ表示されます。

$ history | tail -2
1004  echo foo;echo bar;echo baz
1005  history | tail -2

を使用して再実行できます!1004

答え3

はいCtrl+ OUp、、、Up+、+、+を使用Upして最後の3つのコマンドを実行できます。CtrlOCtrlOCtrlO

コマンドが履歴に再度追加されたら、Ctrl+を長押ししてOコマンドの順序を繰り返すことができます。

~からオンライン文書を読む:

operate-and-get-next Ctrl+ O:

改行文字が入力されているかのように呼び出しアプリケーションに戻るために現在の行を受け入れ、編集のために履歴から現在の行に関連する次の行を取得します。指定された場合、数値引数は現在行の代わりに使用する履歴エントリを指定します。

これはReadline 8.1への比較的新しい追加です。 (2020年12月。)

関連情報