セッション間のkshコマンド履歴を有効にする方法

セッション間のkshコマンド履歴を有効にする方法

kshまたは を実行すると、mksh上矢印は何もしません。

$ ksh
$ ^[[A^[[A^[[A^[[A^[[A

bashしかし、起動しbash、上矢印を押すと動作します。

$ bash
developer@1604:~$ ssh [email protected] -p 2223

ksh または mksh を起動すると、履歴はありません。 $HISTFILE変数も設定しましたが、新しいシェルを起動しても記録はありません。

どうですか? Kornシェルはセッション間の記録を覚えていませんが、bashシェルは覚えていることは本当ですか?

Kornシェルが好きで、より良い、より広範な記録が必要な場合は、kshを介してこの機能を使用できますか?

ベストアンサー1

いいえ、これは本当ではありません。

ファイル名の場合、$HISTFILEそのファイルにセッション履歴が保存されます。これはマニュアルに記載されています。シェル履歴に記憶されるコマンドの数は値によって制限されます$HISTSIZE

bash私はシェルセッションの終わりではなく、各コマンドの後に履歴がファイルにフラッシュされると思います。これはksh使用する実装によって異なります。

HISTFILEファイルのファイル名~/.profile(ログインシェルから読み取る)または指定ファイル$ENV(対話型シェルから読み込み、デフォルトは$HOME/.kshrcksh93のファイル名に設定します。デフォルトは、$HISTSIZE使用している実装に応じて500、512、またはそれに似ています。kshこれらの変数はエクスポートする必要はありません。これを行う前に履歴ファイルが存在する必要はありません。


コメントでは、特定のEmacsの移動キーとコマンドライン編集キーが機能しないと述べました。これは、シェルがEmacs編集モードにないためです。変数EDITOR(またはVISUAL)をに設定するか、Emacsコマンドライン編集モードを有効にするためにemacs使用します。set -o emacsこれはマニュアルにも記載されています。これらの変数は、シェル以外のプログラムで使用したい場合以外はエクスポートする必要はありません。


要約:

ファイルから$HOME/.profile

export ENV="$HOME/.kshrc"

ファイルから$HOME/.kshrc

HISTFILE="$HOME/.ksh_history"
HISTSIZE=5000

export VISUAL="emacs"
export EDITOR="$VISUAL"
set -o emacs

これはOpenBSDおよびksh93pdkshOpenBSDで)を使用してksh徹底的にテストされました。私はそれを使用しませんが、派生物であるmkshため、pdkshこれはそのシェルでも機能すると思います。

ノートそれと(pdkshそして)ksh93bash履歴ファイルを共有できません。歴史的形式が異なるからです。

bashfor および for ( with in )kshのように、および の初期化ファイルを分離した場合、通常は問題になりません。 (一般的に)を見ると、さまざまな実装をより差別化できます。.bash_profile.bashrcbash.profile.kshrckshexport ENV="$HOME/.kshrc".profileksh$KSH_VERSION

おすすめ記事