
私はこれをDebianシステムのpdksh
対話型シェルとして使用してきました。最初のコマンドラインの記録は、私がAIXやSolarisなどのプラットフォームで成長した方法と同様に機能しました。
pdksh
最近のDebianの現在の実装により、コマンドラインのmksh
記録は私の指が期待するように機能しなくなりました。私がmksh
望むことをするようにこれを設定できるのか、それとも別のイディオム(または他のシェル)を見つけなければならないのかを調べようとしています。
ksh
私はvi編集モードで(set -o vi
and)を使いますFCEDIT=vi
。複数のコマンドプロンプトで短い複数行コマンドを作成します。
daystrom:/home/pronovic> for i in 1 2 3
> do
> print $i
> done
1
2
3
これはで期待どおりに機能しますmksh
。ただし、コマンドライン履歴はそうではありません。
(以前)私がよく知っているすべてのkshell実装では、スクリプトは履歴に単一の項目として残ります。そうすればボールを打ってESC-k
ライン前に戻ることができるfor
。その後、スクリプトを再編集するか、ESC-v
をクリックできますvi
。
では、mksh
私のスクリプトのすべての行(line for
、do
line、print
lineなど)が私の履歴の別の項目で終わります。だからESC-k
私をキューに連れて行って、done
再びキュー ESC-k
に連れて行ってください。print
これを構成する方法を探しているので、mksh
スクリプトESC-k
の先頭に移動してスクリプトを実行または再編集できます。しかし、私はこれを行う方法を見つけることができませんでした。
私が見つけた唯一の議論はゲマネ、これは^O
何らかの方法で使用できることを意味します。しかし、これがどのように関連しているかは私には明確ではありません。あるいは、vi編集モードでは関係がないかもしれません。
これを行うことは可能ですか?
答え1
mksh
管理者はここにあります;-)これは一般的な「サポートフォーラム」ではありませんが...
mkshでは、対話型編集(ESC + v(vi)/ ^ Xe(emacs)ではありません)は内部的に改行文字で終わるため、履歴と同じように単一行に制限されます。これはpdkshでも常にそうです。
明らかに、Debianのpdkshは何らかの方法でパッチされており、改行が含まれている^J
ことがわかります。これは私が知らない Debian 固有の修正です。 (私はvi編集モードを使用していないので、ユーザーに時々資料を要求してパッチを送信するようにしますedit.c
。そしてメンテナンスの問題を取り除くためにコード全体を書き直すことを検討しています。
^O
emacsモードのみ。しかし、おそらくviモードで動作させることができます。
あなたの直接の質問に答えるには:いいえ、現在mkshでは不可能です。しかし、私はDebianがやったことを見て、私たちがそれで生きることができるかどうかを調べようとすることができます。
2015-07-05 編集
私はpdkshを見ました。これは実際に「単純な」記録の機能です。単に「複雑な」レコードを複製することは不可能であり、他の多くのオペレーティングシステムとは異なり、pdkshのDebian以前のラッパーはその機能をアクティブにしないことにしました。
今日、この機能を完全に再実装し、コマンドが完全にコンパイルされるまで実際の書き込み書き込みを延期しました。つまり、まれなエラーケースでは、一部の履歴項目が失われる可能性があります(確認すると、構文エラーはカテゴリに属しません)。入力は、ESC v
/^Xe
および履歴の保存/読み込みを含むEmacsおよびViモードで必要に応じて機能します。