Bashプロンプトでの一般的なワークフローには、コマンドを入力してCtrl+R「リテラル」メカニズムを使用して検索することが含まれます。
私は過去数年間、時々コマンドがbashの記録からランダムに消えることを発見しました。
次のコマンドを入力して正常に実行したとします。
$ command A arg1 arg2
$ command B arg3
$ command C arg4
...次にEnterを押しますCtrl+R arg1
。たとえば、「failed-reverse-i-search `arg1 '...」エラーが発生します。
興味深いことに、フォローアップを取ると次のようになります。
$ history | less
...command A
実際にはレコードではありませんが...レコードにアスタリスクで始まる「列0」行があります。列0は、履歴に書き込まれたコマンドが開始される列の左側の列を意味します。空の確認。
このようなものを見た人はいますか?
これはbash 5.0.3を実行しているdebian / linux stable(buster)にあります。
答え1
このようなものを見た人はいますか?
はい。再現するには:
- ランニング
echo foo
。 - ランニング
echo bar
。 - ↑↑soが
echo foo
表示されます(またはCtrl+ rfoo
、soecho foo
が表示され、次の行の→最後まで行くには長押しします)。 - を長押しすると空白行になり、Backspace実行
echo foo
されません。 - ↓そうですね
echo bar
。 - Enterもう一度実行してください
echo bar
。
これにより、history
期待できる場所に空の項目が印刷されますecho foo
。*
意味として表示されますこのアイテムは編集されました。。
revert-all-at-newline
readline変数を確認してください(注man 3 readline
)。
- 一時設定:
bind 'set revert-all-at-newline On'
Bashで実行。 - 新しいBashインスタンスの永続設定:または
set revert-all-at-newline On
に配置されます。/etc/inputrc
~/.inputrc
答え2
コマンドの前にスペースがある場合、コマンドは記録されません。