rlwrapを使用してダッシュをラップする正しい方法

rlwrapを使用してダッシュをラップする正しい方法

Ubuntuでは、ダッシュシェルを使用するときにreadlineキーバインディングとファイル名の完成を取得するように設定しましたalias sh='rlwrap --complete-filenames sh'(私のコンピュータでは、shは/usr/bin/sh、/usr/bin/dashへのシンボリックリンクです)。しかし、rlwrapはSIGTSTPを正しく処理できないようです。次のシェルセッションを検討してください。

バッシュから:

[email protected]:~$ alias sh='rlwrap --complete-filenames sh'
[email protected]:~$ sh  # Run dash.

ダッシュとして:

$ sleep 100  # Right after this, I press Ctrl-Z to send SIGTSTP.
[1]+  Stopped                 rlwrap --complete-filenames sh
[email protected]:~$  # What!? Why do I get a bash prompt!?

Ctrlzを押すとdash代わりに停止しますsleep。 SIGTSTPにダッシュ自体ではなくダッシュで実行されているフォアグラウンドプロセスを停止させるにはどうすればよいですか?ダッシュでrlwrapを使用する正しい方法は何ですか?

私はrlwrapの代わりに./configure --with-libeditlibedit()を使用してダッシュをコンパイルしてreadline機能(使用dash -E)を取得できることを知っていますが、残念ながらこれはファイル名の完成をサポートしていないようです。

答え1

SIGTSTPにダッシュ自体ではなくダッシュで実行されているフォアグラウンドプロセスを停止させるにはどうすればよいですか?

あなたが望むものではありませんか?rlwrap作業テーブルに何があるかを知る方法はなく、dashそれに応じて対応する鎮静ダーツをサブプロセスの1つに送信できますdash

しかし、解決策はより簡単かもしれません。CTRL+Zキー押しをにバインドして渡すだけdashです。rlwrap-direct-keypress.inputrc

そして現在の rlwrapこれ動作しませんただし、rlwrapすべてのdash端末設定(VSUSP行文字を含む)はミラーリングされているため、rlwrapキー押下は表示されません。

ここに私の仕事のリストがあります(参照https://github.com/hanslub42/rlwrap/issues/111)

ハンス(rlwrap管理者)

関連情報