対話型コマンドでは、Bashバインディングコマンドが正しく機能しません。

対話型コマンドでは、Bashバインディングコマンドが正しく機能しません。

bashユーティリティを使用していくつかのコマンドをバインドしようとすると、bind -x端末にstdin入力が表示されません。

例:

root> # bind -x '"\C-p": su dargod'

ctrl+P を入力すると、ユーザー dargod としてログインしましたが、入力した内容はすべて表示されません。接続用のバインディングsshコマンドと同じ状況です。

シェルと正常に対話するにはどうすればよいですか?

情報:

Bash 3.1.17(CentOS 5)
Bash 4.2.46(CentOS 7)
Bash 4.1.2(CentOS 6)
Bash 5.0.7(Arch Linux)
Bash 4.2.45(Gentoo)

ベストアンサー1

キーストロークにバインドされたコマンドは、行編集の一部として使用されます。エコーなしでネイティブモードで端末を実行し、bashはすべてのキー押下が処理されると予想します。ほとんどのコマンドは端末で実行されると予想されます。調理モード、端末は一度に1行ずつ読み込み、入力をエコーし​​ます。

端末の対話に代わるコマンドを実行するには、端末を一時的に「料理」モードに設定してください。

bind -x '"\C-p": _bash_stty_save=$(stty -g); stty sane; su dargod; stty "$_bash_stty_save"'

bashが予期しないタスクを実行しているため、まだ完璧に動作しない可能性があります。バインディングは、コマンドの実行に適したツールではありません。コマンドのショートカットを定義するには、次のようにします。ニックネーム


1厳密に言うと、bashラインエディタでは^C、、()、および^Z(()が無効になっていないため(emacsモードの増分検索と競合しても)、完全なデフォルトモードではありません。^\isig^Q^Sixon^S

おすすめ記事