readline é um projeto GNU (desenvolvido junto com bash ). Existem outras alternativas como o libedit BSD, e todas as shells POSIX possuem seu próprio editor de linha, específico para o shell ou baseado em qualquer uma das bibliotecas que implementam pelo menos um modo de edição vi (o único especificado pelo POSIX, embora a maioria também suporta um modo emacs (não especificado pelo POSIX porque o RMS objetou a ele)).
POSIX, no entanto, só especifica esse modo de edição de linha para a linha de comando do shell, não para read .
ksh93 suporta-o com read embora (desde que stdin seja um terminal). Lá você pode fazer:
set -o emacs
IFS= read -r 'line?prompt: '
O zsh equivalente está com o vared (editor de variáveis) embutido:
line=; vared -p 'prompt: ' line
Esse é o maior recurso rico em seu histórico de tratamento e na personalização completa da associação e conclusão de chaves.
read -e é bash específico.
IFS= read -rep 'prompt: ' variable
Não há equivalente POSIX. POSIXly, você poderia iniciar vi (especificado por POSIX) para editar um arquivo temporário e ler o conteúdo desse arquivo em uma variável.
Como alternativa, você pode procurar a disponibilidade de um dos zsh / bash / ksh93 ou rlwrap ou outros wrappers em torno de libreadline ou socat (desde que tenha sido criado com readline support ) e use qualquer um deles se disponível para ler a linha ou reverta para read ou vi se não.
Ou use essa LE função de editor de linhas vista neste Q & A semelhante que implementa um editor de linha semelhante a emacs .