web-dev-qa-db-ja.com

shの履歴バッファにアクセスするにはどうすればよいですか? (バッシュにはありません)

shにコマンド履歴がありますか?たとえば、アクセス方法や、明確にする方法などはありますか?

ここでシェルを明確にするには:Gui以外のLinuxシステムにログオンしていて、$ ShellがBashに設定されておらず、ダッシュまたはBourneのようなシェル。

マニュアルページは、一部のBSDシステムで見た「履歴」コマンドを参照していましたが、これは実際には私のシェルにはなく、後続のshmanページと情報ページで答えを簡単に見つけることができませんでした。

この投稿 の記述子のコメントは、おそらくshのキーバインディングについて学ぶ必要があることと関係があるのではないかと考えました実際にはシェル間の違いのようなものよりも。

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

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

3
MelBurslan

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

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

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

シェルによっては、保存場所を構成できる場合とできない場合があります。 bashおよびzshは、HISTFILE(すべて大文字)変数を使用します。シェルが正しく構成されている場合、これはすべきではありません環境変数であるため、envに表示されている場合は間違いです(ただし、setまたはprintf %s\\n "$HISTFILE"の出力には表示されます。 )。

プログラムが履歴をサポートしていない場合(たとえば、edreadを使用するシェルスクリプト、またはmysqlの古いバージョン)、readlineを使用してbashのようなタブ補完、矢印キーを提供するrlwrapと呼ばれるクロスプラットフォームアプリケーションがあります。取り扱い、および歴史。

4
Score_Under

醜いですが、ESXiホストのようにshしか利用できない古いシステムでこれを使用します。

cat `printf %s $HISTFILE`
0
Mark Stanfill