shで履歴バッファにアクセスするには? (Bashではない)

shで履歴バッファにアクセスするには? (Bashではない)

コマンド履歴はありますか?シェン、アクセス方法と明確性を確保する方法など?

ここでシェルを明確にするために:GUIではなくLinuxシステムにログインしたとします。$シェルBashに設定する代わりに、DashやBourneに似たシェルに設定します。

マニュアルページには一部のBSDシステムで見た「history」コマンドが記載されていますが、これは実際には私のシェルにはありません。

記述子の説明この投稿おそらく、これはキーバインディングを理解する必要があるものとより関連性があるかもしれないと思いました。シェン実際、殻の違いと同じではありません。

将来の読者のために、ここにシェルの歴史に関する素晴らしい記事があります。

答え1

すべてのシェルが履歴をサポートしているわけではありません。 libeditサポートにコンパイルされた場合、コマンドはdash制限された履歴サポートを提供しますが、fcそうでない場合は提供されません。dash履歴ファイルを保存できません。

通常、シェルが上矢印キーをサポートしていない場合、履歴ファイルも保存されないと想定できます。これは厳格で迅速なルールではありませんが、私が遭遇するすべての場合に当てはまります。

他のいくつかのシェル(bash特に他のシェル)は通常、履歴をホームディレクトリにファイルとして保存し、プログラム名に置き換えるreadlineを使用し~/.*_historyます*。たとえば、Python 3はreadlineを使用し、その履歴を~/.python_history

シェルによっては、保存場所を設定したり設定したりしない場合があります。bashそして(すべて大文字)変数をzsh使用してください。HISTFILEシェルが正しく設定されている場合してはいけないは環境変数なので、 で見ると間違いをしたことになります(ただしenvor の出力には引き続き表示する必要があります)。setprintf %s\\n "$HISTFILE"

プログラムが履歴をサポートしていない場合(edシェルスクリプトreadや以前のバージョンを使用するなど)、bashなどのタブを完了し、readlineを使用した矢印キーの処理と履歴の記録を提供するmysqlクロスプラットフォームアプリケーションが呼び出されます。rlwrap

答え2

明示的に設定しない限り、デフォルトのシェル履歴はありません。あることを確認するには、env|grep -i histコマンドを実行できます。 etc(大文字で表示)などの変数が表示されると、histfileシェル履歴が有効になり、履歴ファイルがどこにあるかを確認する必要があります。クリーンアップするには、ファイルを削除する以外に適切な方法を使用できます

答え3

見苦しいがshしか使用できない古いシステム(ESXiホストなど)でこれを使用します。

cat `printf %s $HISTFILE`

答え4

履歴コマンドを入力せずに履歴ファイルを消去するソリューションを見つけました。 .(シェル/パッケージ名)_historyファイルパス(通常はホームディレクトリにあります)を見つけて、どこかに空のファイルを作成し、cat path / to / historyファイルを使用します。 < Path / to / empty以降のファイルを削除すると、履歴が消去されます。このスクリプトを使用して name.sh ファイルを作成できます。

関連情報