web-dev-qa-db-ja.com

bash(または、そのためのシェル)には「上書き」モードがありますか?

(たとえば)一連のファイルに対して同様のコマンドを実行しています。例として、私がこのようなことをしているとしましょう(これは私がやっていることではなく、単なる例です):

> cat path/to/dir/file01.txt
  [file contents]
> another-command path/to/dir/file01.txt
  [more output]
> cat path2/to/dir/file02.txt
  [file contents, from which I can tell I should do something different]
> different-command path2/to/dir/file02.txt
  [yet more output]
> cat path3/to/dir/file03.txt
  [file contents]
> another-command path3/to/dir/file03.txt
  [output]

等.

使用後、  キーを押して前のコマンドに戻ると、ファイル名やパスの共通部分など、重複していないテキストを削除して再入力する代わりに上書きできます。

これを行う方法はありますか?

4
Wilson F

Bashにはそれがありますが、デフォルトではどのキーにもバインドされていません。

行を追加

Control-o: overwrite-mode

$HOME/.inputrcまたは/etc/inputrcに使用する Ctrl+o 挿入モードとオーバーライドモードを切り替えます。

詳細については、 Bash manpageREADLINEセクションを参照してください。

3
Florian Diesch

直接求めたものではありませんが、さまざまな形式の history Interaction を使用してタスクを単純化できます。

$ cat path/to/dir/file01.txt
cat: path/to/dir/file01.txt: No such file or directory
$ different-command !$
different-command path/to/dir/file01.txt
bash: different-command: command not found
$ cat !$:s/1/2/
cat path/to/dir/file02.txt
cat: path/to/dir/file02.txt: No such file or directory
$ ^2^3
cat path/to/dir/file03.txt
cat: path/to/dir/file03.txt: No such file or directory
$ !-3:s/1/3/
different-command path/to/dir/file03.txt
bash: different-command: command not found
$ !diff:s/3/4/
different-command path/to/dir/file04.txt
bash: different-command: command not found

エラーを無視すると、履歴インタラクション(!$!$:s/1/2^2^3)を使用するたびに、bashがどのように展開したかを確認できます。

  • !$-前のコマンドの最後の単語
  • :s/1/2-選択したWordで最初に出現する12に置き換えます(この場合、再び!$でした)。
  • ^2^3-前のコマンド全体で最初に出現する23に置き換えます。
  • !-3-最後から3番目のコマンドを実行します。
  • !diff-diffで開始した最後のコマンドを実行します。
5
muru

$HOME/.inputrcのキーをreadlineディレクティブにバインドできます。

"code": overwrite-mode

特定のキーを押して生成されたコードを発見するには CtrlそしてV 一緒にそのキーを押します。たとえば、Ins(挿入)キーを押すと、^[[2~が表示されます。 ^[はESCの画面表示であり、readlineの場合は\eで表されることに注意してください。したがって、次の行を$HOME/.inputrcに追加する必要があります。

"\e[2~": overwrite-mode

そしてbashを再起動します。

4
colemar