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
.