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-libedit
libedit()を使用してダッシュをコンパイルして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
管理者)