汎用(POSIX)シェルから効果を取得する方法read -e
(行編集を有効にしreadline
て使用可能にする)?bash
私はこのコマンドのためにPOSIXの互換性を失いたくありません。
答え1
readline
GNUプロジェクトです(で開発されましたbash
)。 BSD libeditなどの他の代替手段があり、すべてのPOSIXシェルには、シェル固有またはvi
少なくとも1つの編集モード(POSIXで指定された唯一の編集モード、ほとんどのモードもサポートしていますemacs
)を実装するライブラリベースの独自の行エディタがあります。 POSIX は RMS オブジェクトを指定しません)).
ただし、POSIXはシェルコマンドラインの行編集モードのみを指定しますread
。
ksh93
ただし、これをサポートしますread
(ただし、stdinとstderrが端末デバイスにある場合)。ここでは、次のことができます。
set -o emacs
IFS= read -r 'line?prompt: '
これに対応するのは(変数エディタ)組み込みですzsh
:vared
line=; vared -p 'prompt: ' line
これは、記録処理とキーバインディングと仕上げの完全なカスタマイズ機能を備えた最も豊富な機能を提供します。
read -e
具体的に言ってくださいbash
。
IFS= read -rep 'prompt: ' variable
POSIXに該当するものはありません。 POSIXlyでは(POSIXで指定されているように)一時ファイルの編集を開始し、vi
そのファイルの内容を変数として読み取ることができます。
zsh
または //bash
または libreadline または (support で構築されたと仮定 ) 周辺の他のラッパーの 1 つの可用性を見つけて使用できる場合、そのラッパーの 1 つを使用して行を読んだり使用できない場合に戻すことがksh93
できます。rlwrap
socat
readline
read
vi
またはそれを使用してくださいLE
この同様のQ&Aでラインエディタの機能を確認してください。同様の制限付き行エディタを実装しますemacs
。
答え2
POSIXは(バックスラッシュ読み取り可能)のみをread
サポートしています。-r
後で解析されるファイルのエディタを起動しない限り、ユーザー入力を要求し、コマンドラインなどの編集を提供する方法はありません。