ああ、歴史より良い

コンソール(端末)で十分な時間を費やしていることが判明しました。 時々、そこでいくつかのコマンドを実行し、それらの結論を注意深く研究します。 特定のコマンドの結論に戻らなければならないことがよくありますが、それは絶えず失われます:端末が非難されてからtmux



でウィンドウを閉じてから、他のコマンドの結論がずっと前に非常に有用な行を打ち込んで埋めました。



ユーティリティの出力を保存するために、私は多くの人と同じようにtee



使用しました。 それは機能しましたが、無限のerror.log



out.log



output.log



err.log



log.log



lll.txt



などの間で絶え間なく大騒ぎし、それがlog.log



狂わせなかった場合、それはめちゃくちゃ迷惑でした。 一定の順序を維持する代わりに、これらの同じログを埋め、定期的に埋葬地をバックアップする新しいフォルダー(1)を作成することは常に魅力的でした。



それから私はahを書きました。これは私の人生を大きく改善した小さなユーティリティです。



ahは、ほとんどすべてのシェルに組み込まれている組み込み履歴コマンドへの小さな追加であると想定されていました。 ただし、ahは、zsh(私は自分で使用するため)とbash(zshを使用しないほとんどの人が使用するため)の2つでしか動作しません。 これは決して歴史に代わるものではなく、むしろ歴史への追加です。 ああ、基本的に、4つのことを行うことができます。履歴を表示し、コマンドストリームの出力を保存し、履歴内の数値にバインドし、要求に応じて表示します。 さらに、ブックマークなどの些細なこともあります(履歴からのエントリには名前を付けることができます)。



コマンド出力の保存



ahは、コマンドの出力を組み合わせて保存する方法を知っており、それ自体をカタログ化します。 最も単純なケースでは、これを行うだけです:



 ➜ ah t -- find ./app -name "*.go" -type f ./app/historyentries/get_commands.go ./app/historyentries/parser.go ./app/historyentries/keeper.go ./app/historyentries/history_entry.go ./app/historyentries/history_processor.go ./app/environments/environments.go ./app/utils/re.go ./app/utils/logging.go ./app/utils/synchronized_writer.go ./app/utils/exec.go ./app/utils/utils.go ./app/commands/bookmark.go ./app/commands/remove_bookmarks.go ./app/commands/gc.go ./app/commands/list_trace.go ./app/commands/tee.go ./app/commands/execute.go ./app/commands/show.go ./app/commands/list_bookmarks.go ./app/slices/slices.go
      
      







出力は保存され(stdoutとstderrの両方で結合されます)、後で要求することができます。 たとえばティーとの違いは何ですか? ティーを使用すると、そのようなものも書くことができます



 ➜ find ./app -name "*.go" -type f |& tee output.log
      
      







実際、これらのチームは同等ではありません。 事実、teeの場合、stderrをstdoutにリダイレクトするため、teeの後にそれらをフィルタリングする機能が失われます。 ああはこの分離を保持します。 つまり、次のように書くことができます



 ➜ ah t -- find ./app -name "*.go" -type f > /dev/null
      
      







そして、画面にstderr出力のみを取得します。 そして、ああ保存するものは何ですか? 両方のスレッドが保存されます。 そして戻りコード。 はい、ああは前のコマンドが動作したのと同じコードで終了します。 ここでncursesアプリケーションを実行しても、Ahはsshで正常に動作します。 必要に応じて、擬似TTYのサポートと、実際のインタラクティブシェルで実行する機能があります。



ストーリー表示





 ➜ ah s 10 ... !10109 (02.11.14 18:05:14) nvim main.go !10110 (02.11.14 21:48:12) * ah t -- find ./app -name "*.go" -type f
      
      







はい、ahはHISTFILE



の内容を表示でき、 HISTFILE



を知っていHISTTIMEFORMAT



。 番号の横に感嘆符がある理由を推測してください。 しかし、星はah t...



前にどういう意味ですかah t...



? これは、ahがこのコマンドの出力を保存することを意味します。 l



サブコマンドを使用して出力を表示できます。



 ➜ ah l 10110 ./app/historyentries/get_commands.go ./app/historyentries/parser.go ./app/historyentries/keeper.go ./app/historyentries/history_entry.go ./app/historyentries/history_processor.go ./app/environments/environments.go ./app/utils/re.go ./app/utils/logging.go ./app/utils/synchronized_writer.go ./app/utils/exec.go ./app/utils/utils.go ./app/commands/bookmark.go ./app/commands/remove_bookmarks.go ./app/commands/gc.go ./app/commands/list_trace.go ./app/commands/tee.go ./app/commands/execute.go ./app/commands/show.go ./app/commands/list_bookmarks.go ./app/slices/slices.go
      
      







ところで、10 in ah s 10



文字通り「最後の10チームを表示する」という意味です。 同時に、スライス構文がサポートされます(Pythonの場合のように1:1): ah s 10 20



は、11から20までのすべてのコマンドを表示しますah s 10 _20



から20まで( _



でなく-



)。 正規表現で検索することもできます+原始的なあいまい一致があります。



さらに、サブコマンドb



をブックマークし、 lb



でスクロールし、 rb



で削除し、 gt



で古い結論を消去できますが、これらは些細なことです。



私は他の誰かがより簡単に生きることを願っています



だからそこに。

github.com/9seconds/ah



All Articles